是什么决定了卫星装配的目标框架版本?

时间:2011-05-23 10:58:11

标签: msbuild tfsbuild satellite-assembly target-framework

什么决定了卫星装配的目标框架版本?

查看日志文件我可以看到通过运行ResGen.exe和Al.exe来构建附属程序集,但我无法找出决定生成程序集的目标框架的内容。

背景

我正在尝试解决一个问题,即当我在构建服务器上构建它时,卫星程序集成为.NET 4.0运行时的目标,但是当我在开发计算机上编译时,目标是.NET 2.0运行时。该解决方案的其余部分针对.NET 2.0运行时,如果针对.NET 4.0运行时,可执行文件将不会加载附属程序集。

我尝试在构建服务器上使用msbuild“手动”构建项目,这也导致了针对.NET 2.0运行时的附属程序集。

当我使用自动构建服务器构建时,我只得到错误的4.0目标运行时版本。

4 个答案:

答案 0 :(得分:16)

我只花了整整一天跟踪它,但我想我已经解决了。是的,我是烈士。受益于不幸冒险的结果!

我最好的猜测是,Windows 7.1 SDK安装中似乎有一个关于它添加的注册表项的错误。某些注册表值指向 7.0 时应指向 7.1 。此外,某些注册表项名称不正确。

经过一些手动更改后,我的资源DLL又回到编译框架的相应目标版本。我很确定x64版本会修补我的修改。 使用风险自负!

但是,我个人对我们的构建服务器的黑客注册表不太满意。谁知道我的服务器版本在运行时等待我的其他恐怖事件。我正在考虑安装Visual Studio 2010。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools]
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools\1033]
"SP"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools-x86]
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx35Tools-x86\1033]
"SP"=dword:00000000

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="c:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\"
"MSBuildToolsRoot"="c:\\WINDOWS\\Microsoft.NET\\Framework\\"
"FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1@InstallationFolder)"
"MSBuildRuntimeVersion"="4.0.30319"
"SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx40Tools-x86@InstallationFolder)"
"SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx35Tools-x86@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"

答案 1 :(得分:1)

今天遇到同样的问题。原因似乎是没有设置一些必需的环境变量。

以前,我的构建服务器上的build命令只是“C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe”

我创建了包含两行的批处理文件:

@call "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\setenv.cmd"
@C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe %* 

并将服务器配置为使用此批处理文件作为构建命令。

我的构建服务器是Jenkins,而不是TFS,但我希望这也能解决您的问题。

答案 2 :(得分:0)

自动构建如何设置执行MSBuild的命令环境?如果您能够解决这个问题,并且看到它与您在同一台机器上“手动”成功构建时设置命令环境的方式有何不同,您可能会找到答案。如果找不到这些线索,请将构建设置为使用诊断日志(/ fl /flp:v=diag;logfile=build-diag.log)并区分自动构建日志和手动构建日志。

答案 3 :(得分:0)

除了Johnny Kauffman的回答之外,我遇到的问题是我在HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0中有一个名为11.0的子项。在这个键中引用了HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A,这在我的机器上是不存在的。因此,如果Johnny Kauffman的回答无效,请检查11.0密钥并考虑将其删除。