“该文件尚未预编译,无法请求”

Posted

技术标签:

【中文标题】“该文件尚未预编译,无法请求”【英文标题】:"The file has not been pre-compiled, and cannot be requested" 【发布时间】:2009-05-28 08:38:56 【问题描述】:

我在 Windows 2003、IIS 6 服务器上安装了一组标准 Web 服务。当我通过浏览器访问任何网络服务时,我会看到一个 .NET 黄色屏幕,但以下情况除外:

“/SuperOfficeWebService/Contact.asmx”文件未预编译,无法请求。

相同的标准 Web 服务(通过 .msi 安装)可在其他机器上运行。

.asmx 文件仅包含文本“这是由预编译工具生成的标记文件,不应删除!”,如预期的那样。

在 bin\ 子文件夹中,我有与 .asmx 文件匹配的 .compiled 文件。

什么可能导致错误消息?是否有任何 IIS 设置或 .NET 2.0 设置阻止 IIS 加载已编译的文件?

【问题讨论】:

【参考方案1】:

如果其他人仍在寻找解决方案,我遇到了同样的问题。我的问题是我使用了错误框架文件夹中的“aspnet_compiler”。我的项目是在 VS'05 和 .net 2.0 中创建的。当我需要从“c:...\v2.xxxx”进行预编译时,我试图从“c:\windows\Microsoft .NET\Framework\v4.xxxx”进行预编译。

希望对某人有所帮助。

【讨论】:

【参考方案2】:

通过安装“Microsoft Web Service Enhancements v3.0”解决了这个问题。

可以在这里下载:http://www.google.no/search?hl=no&q=microsoft+web+services+enhancements+3.0+download&cad=h

【讨论】:

MS WS enhencements 3.0 是什么意思?【参考方案3】:

我收到了同样的信息,但没有网络服务。就我而言,它是一个普通的 ASP.NET 2.0 Web 应用程序,它也恰好使用 AJAX Control Toolkit v1.0.61025。当我追踪它时,我发现我的环境(VS 或我的插件之一)从我的 web.config 中删除了两个元素:

“程序集”标签缺少两行:

<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

“system.web”部分中也缺少这些行:

<httpHandlers>
  <remove verb="*" path="*.asmx"/>
  <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
<httpModules>
  <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

我正在进行 XCOPY 部署并使用 web.config 来控制开发和实时之间的差异(连接字符串等)。在 VS 中发布(到我的开发箱上的文件夹)后,我删除了 web.config(因为它有我的开发设置)并继续使用相同的 web.config。因为实时 web.config 缺少这些行,所以我一直在针对 web.config 进行编译,该 web.config 的不同之处不仅仅是几个应用程序键值。

在我的开发环境中恢复这些行并重新发布解决了该问题。哇,他们刚刚从我的 VS 2010 中消失了,我最好记录一个问题!

【讨论】:

【参考方案4】:

我遇到了同样的问题,并通过运行以下命令将正确的编译器与 IIS 重新关联来修复它。

转到您要使用的 .NET 版本的文件夹(即:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

然后运行:aspnet_regiis -i

希望这会有所帮助。

【讨论】:

【参考方案5】:

如果您在运行 MSBuild 脚本时遇到此问题,则很可能您的项目是 2.0 或 3.5 项目,并且 MSBuild 使用的是 4.0 编译器。将TargetFrameworkMoniker="3.5" 添加到您的AspNetCompiler 指令中。

【讨论】:

【参考方案6】:

在我们的案例中,我们在重新创建网站后收到了此消息。该站点上的文件必须使用 .NET 4.0.3 编译,IIS 默认为 2.0.5。我们必须在 Site> Properties> ASP.NET 中更改 ASP.NET 版本。

【讨论】:

【参考方案7】:

部署 Microsoft.WebServices3.dll 3.0.5305.0 的 Bin 在带有 .Net Framework 4.5+ 的 Windows Server 2012 R2 上为我工作。此选项减少了安装 .Net Framework 3.5 和 WSE 3.0 的需要。

【讨论】:

以上是关于“该文件尚未预编译,无法请求”的主要内容,如果未能解决你的问题,请参考以下文章

编译要排除的 MySQL 行列表时:预编译还是不预编译?

vs2008添加预编译命令

取消选中“允许预编译站点可更新”时无法使用“发布期间预编译”网站

Android常见的预编译(prebuilt)

JavaScript的预编译过程

JavaScript的预编译过程