在Web部署项目期间,ASP.NET编译器因XmlSerializers错误而失败

我们正在使用Visual Studio 2010 Web部署项目在构建期间编译Web应用程序网站。我们的构建代理上未安装Visual Studio 2010。我们在构建期间遇到错误(参见下文),该错误与自动生成的Foo.XmlSerializers.dll相关,该运行时的运行时间比当前加载的运行时更新,并且无法由aspnet_compiler.exe加载。 我们在项目文件中定位.NET Framework v3.5。 这是错误(为长行重新格式化):
"C:BuildAgentwork3836706d661b8a05projectsrcFoo.FrontEnd.WdpSite
Foo.FrontEnd.WdpSite.wdproj" (Build target) (1) ->
  (AspNetCompiler target) ->
    ASPNETCOMPILER : error ASPCONFIG: Could not load file or assembly 
    'Foo.FrontEnd.Site.XmlSerializers' or one of its dependencies. 
    This assembly is built by a runtime newer than the currently loaded 
    runtime and cannot be loaded.   
[C:BuildAgentwork3836706d661b8a05projectsrcFoo.FrontEnd.WdpSite
Foo.FrontEnd.WdpSite.wdproj]
    
已邀请:
我有一个类似的问题,有相同的错误信息,经过很多挫折后找到了解决方案(希望能给出一些想法)。 在这里,我们有一个构建服务器,其中包含Windows SDK 7.1(以及使用Vs 2008时的6.1)构建面向.NET 3.5的VS 2010项目。然后使用aspnet_compiler(根据http://msdn.microsoft.com/en-us/library/ms229863.aspx#findingthecorrectversion从v2中)预编译Web项目。在预编译期间,我收到了与您自己相同的错误消息,其中包含对Web服务的Web引用的项目(不是Web,只是普通库)。看起来Windows SDK 7.1没有正确设置注册表路径以使用.NET 3.5工具(而Visual Studio确实如此)。这导致Web引用使用.NET 4的目标运行时编译(使用反射器验证),因此aspnet_compiler v2适合。我比较了构建服务器和我的本地visual studio安装的注册表设置,它显示了SDK 7.1的.NET 3.5配置不好,所以我用下面的内容更正了构建服务器。我的猜测是web引用xml(在非web项目中)正在使用sgen for .NET 4进行预编译,因为它没有使用正确的.NET 3.5 sgen。一旦应用了注册表更改,一切都很好(以下在我的构建服务器注册表中不存在,所以我创建了它)。
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.1WinSDK-NetFx35Tools-x86]
"ComponentName"="Windows SDK .NET Framework 3.5 Multi-targeting Utilities"
"InstallationFolder"="C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\"
"ProductVersion"="7.1.7600.0.30514"
就像一个aditional note一样,我也使用WindowsSdkVer将7.1设置为默认SDK。     

要回复问题请先登录注册