TFS 2010创建用于.NET 3.5应用程序的.NET 4.0 XmlSerializers DLL

6
我们有一个在Visual Studio 2010中运行的ASP.Net Web应用程序,目标为.Net 3.5。它是由TFS 2010构建的。这个Web应用程序有一些Web引用,因此构建会创建一个相关的XmlSerializers DLL。然而,这个DLL是一个.Net 4.0程序集。
当我从构建中运行这个Web应用程序时,会出现以下错误:
“无法加载文件或程序集'BLAH_BLAH_WEB_APPLICATION_NAME.XmlSerializers'或其某个依赖项。该程序集是由比当前加载的运行时更新的运行时生成的,因此无法加载。”
我们正在使用一个在TFS 2008下工作的msbuild .proj文件(使用“升级模板”在构建定义中)。我看到了this questionthis one,但那些提到了使用特定的SGen构建步骤。我们不是。此外,所提出的解决方案涉及将路径硬编码到7.0A SGen,这只是...丑陋的。

有没有一种方法可以强制TFS 2010构建将此XmlSerializers DLL编译为 .Net 3.5程序集?


你是否将序列化器项目的目标框架设置为3.5?请检查项目属性。 - Robaticus
我不确定你所说的“序列化器项目”是什么意思。消费 Web 引用本身的项目针对 3.5 版本。是否还有其他关于 Web 引用的设置? - david.mchonechase
2个回答

4
根本问题是注册表中的一个无效值。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0下的SDK35ToolsPath值为:$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx35Tools-x86@InstallationFolder)。然而,构建服务器使用的是Windows SDK 7.1。因此,我将该值更正为:$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDKNetFx35Tools@InstallationFolder)。然后XmlSerializers DLL现在使用的是.NET 2.0。

0
我通过设置名为 SGenToolPath 的参数来解决了这个问题。
/p:SGenToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接