“该文件尚未预编译,无法请求”
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 的需要。
【讨论】:
以上是关于“该文件尚未预编译,无法请求”的主要内容,如果未能解决你的问题,请参考以下文章