4

我们在构建过程中使用 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]
4

1 回答 1

1

我遇到了类似的问题,带有相同的错误消息,经过很多挫折后找到了解决方案(希望能对此提供一些想法)。

在这里,我们有一个使用 Windows SDK 7.1(以及使用 Vs 2008 时的 6.1)构建面向 .NET 3.5 的 VS 2010 项目的构建服务器。然后使用 aspnet_compiler 预编译 Web 项目(根据http://msdn.microsoft.com/en-us/library/ms229863.aspx#findingthecorrectversion从 v2)。在预编译期间,我收到了与您的项目(不是 Web,只是普通库)相同的错误消息,其中包含对 Web 服务的 Web 引用。看起来 Windows SDK 7.1 没有正确设置注册表路径以使用 .NET 3.5 工具(而 Visual Studio 可以)。这导致使用 .NET 4 的目标运行时编译 Web 引用(使用反射器验证),因此 aspnet_compiler v2 很合适。我比较了构建服务器的注册表设置和我的本地 Visual Studio 安装,结果显示 SDK 7.1 的 .NET 3.5 配置不好,所以我用下面的内容更正了构建服务器。我的猜测是 web 参考 xml(在非 web 项目中)是用 sgen 为 .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。

于 2011-08-01T10:38:45.303 回答