我们正在使用Visual Studio 2010 Web部署项目在构建期间编译Web应用程序网站。我们的构建代理上未安装Visual Studio 2010。我们在构建期间遇到一个错误(见下文),该错误与自动生成的Foo.XmlSerializers.dll相关,该运行时的运行时间比当前加载的运行时更新,并且无法由aspnet_compiler.exe加载。
我们在项目文件中定位.NET Framework v3.5。
这是错误(为长行重新格式化):
"C:\BuildAgent\work\3836706d661b8a05\project\src\Foo.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:\BuildAgent\work\3836706d661b8a05\project\src\Foo.FrontEnd.WdpSite\
Foo.FrontEnd.WdpSite.wdproj]
答案 0 :(得分:1)
我遇到了类似的问题,并出现了相同的错误消息,经过多次挫折后找到了解决方案(希望能为此提供一些想法)。
这里我们有一个构建服务器,其中包含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_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-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"
就像一个附加说明一样,我也使用WindowsSdkVer将7.1设置为默认SDK。