TFS 2010为.Net 3.5应用程序创建.Net 4.0 XmlSerializers DLL

TFS 2010为.Net 3.5应用程序创建.Net 4.0 XmlSerializers DLL,.net,visual-studio-2010,msbuild,tfsbuild,.net,Visual Studio 2010,Msbuild,Tfsbuild,我们有一个ASP.NETWeb应用程序在VisualStudio2010中运行,目标是.NET3.5。它由TFS 2010建造。此web应用程序有两个web引用,因此构建将创建一个相关的XmlSerializers DLL。但是,此DLL是.Net 4.0程序集 从内部版本运行此web应用程序时,出现以下错误: 无法加载文件或程序集 'BLAH_BLAH_WEB_应用程序_NAME.XmlSerializers' 或者它的一个依赖项。这 程序集是由运行库构建的 比当前加载的运行时和 无法加载 我

我们有一个ASP.NETWeb应用程序在VisualStudio2010中运行,目标是.NET3.5。它由TFS 2010建造。此web应用程序有两个web引用,因此构建将创建一个相关的XmlSerializers DLL。但是,此DLL是.Net 4.0程序集

从内部版本运行此web应用程序时,出现以下错误:

无法加载文件或程序集 'BLAH_BLAH_WEB_应用程序_NAME.XmlSerializers' 或者它的一个依赖项。这 程序集是由运行库构建的 比当前加载的运行时和 无法加载

我们正在使用在TFS 2008下工作的msbuild.proj文件(使用生成定义中的“升级模板”)。我看到了和,但它们提到使用特定的SGen构建步骤。我们不是。此外,建议的解决方案涉及硬编码到7.0A SGen的路径,这只是…丑陋


有没有办法强制TFS 2010构建将此XmlSerializers DLL编译为.Net 3.5程序集

根问题是注册表中的无效值。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0下的SDK35ToolsPath值为:

$(注册表:HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Microsoft SDK\Windows\v7.0A\WinSDK-NetFx35Tools-x86@InstallationFolder)

但是,生成服务器的Windows SDK版本为7.1。因此,我将该值更正为:

$(注册表:HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Microsoft SDK\Windows\v7.1\WinSDKNetFx35Tools@InstallationFolder)


然后XmlSerializers DLL现在使用.NET2.0

我通过设置名为SGenToolPath的参数解决了这个问题


/p:SGenToolPath=“C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bin”

您是否将序列化程序项目上的目标框架设置为3.5?检查项目属性。我不确定你所说的“序列化程序项目”是什么意思。使用web引用本身的项目的目标是3.5。web引用是否有其他设置?