MSBuild Resources when target framework is 3.5

   服务器没有安装VS开发工具,在上面安装了SDK7.1,使用MSBuild生成资源文件Resources时,出现生成的Version是v4.0的,原因是MSBuild调用了C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\NETFX 4.0 Tools\AL.exe生成Resources,而要正常生成的v2.0的话应该是调用C:\Program Files\Microsoft SDKs\Windows\v7.1\bin\AL.exe进行生成操作。
 
 SDK7.1安装后,在注册表中有些键值指的不对,如将HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0@SDK35ToolsPath设置成了“$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A\\WinSDKNetFx35Tools@InstallationFolder)”,而不是“$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKNetFx35Tools@InstallationFolder)”,将HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0中的多个键值都指定到了v7.0A,而不是v7.1,所以生成时默认调用NETFX 4.0 Tools进行生成操作。
 
   现在可以通过修改注册表来实现正常生成v2.0的Resources。具体如下,先将下面的信息复制出来,保存为*.reg(如MSBuild_Fx35.reg)的文件,在目标机器(注意上目标机器是否64位,如果不是64位的将Framework64改为Framework)执行一下就可以了:
 
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0]
"MSBuildToolsPath"="C:\\WINDOWS\\Microsoft.NET\\Framework64\\v2.0.50727\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5]
"MSBuildToolsPath"="C:\\WINDOWS\\Microsoft.NET\\Framework64\\v3.5\\"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0]
"MSBuildToolsPath"="C:\\WINDOWS\\Microsoft.NET\\Framework64\\v4.0.30319\\"
"MSBuildToolsRoot"="C:\\WINDOWS\\Microsoft.NET\\Framework64\\"
"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 $(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKNetFx35Tools@InstallationFolder)"
"MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
"VCTargetsPath"="$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\"
 
   有一点需要注意的地方是:需要先将项目里面的obj和bin目录清空,要不可能会造成更新注册表后,仍然没有实现正常生成。
   可以通过cmd命令进行Build生成操作测试,具体过程是,先指到要生成的目标项目文件夹,然后执行命令:C:\windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe GTA.CSMAR.Web.Resources.csproj  /property:WarningLevel=2;OutDir=bin\Debug\  /fileLoggerParameters:LogFile=MyLog.log;Append;Verbosity=diagnostic;Encoding=UTF-8 /ToolsVersion:3.5 /p:TargetFrameworkVersion=v3.5
生成。具体的生成日志可以的项目目录下找到MyLog.log进行查看,生成的Dll版本可以通过.NET Reflector反编辑工具查看。
posted @ 2012-06-29 17:42  awiser  Views(194)  Comments(0)    收藏  举报