我正在使用Visual Studio 2010构建一个同时具有x86和x64目标的c#项目。当我使用IDE构建时,我得到了x64和x86目标的正确结果。
当我在命令行上使用msbuild时,即使我在命令行中指定x64,我也会在x86中构建所有内容。
在我从.Net 4.0升级到.Net 4.5之前,我没有遇到此问题。
使用.Net 4.0,即使我在命令行中指定了x86,我也可以获得x64目标。
我在.Net 4.0环境中进行了构建,然后在.Net 4.5环境中进行了另一次构建,并将输出传输到日志文件中。我注意到日志文件中存在一些差异,但我认为这是导致我的问题的原因:
在.Net 4.0中,我在日志文件中看到这一行:
/reference:C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll
在.Net 4.5中,我在日志文件中看到这一行: / r:“C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Microsoft.CSharp.dll”
有什么想法吗?它接缝.Net 4.5正在使用x86特定路径。
答案 0 :(得分:5)
如果您的解决方案的x64配置配置为将项目构建为AnyCPU,则可能会发生这种情况。 .Net 4.5中的新配置选项Prefer 32 bit使得带有Prefer32bit标志的可执行文件在64位计算机上启动为32位进程。由于Prefer32bit标志是MSBuild目标中的默认标志,因此您将看到您描述的行为,即从.Net 4.0升级到.Net 4.5将使您的AnyCPU项目从64位切换到32位。
要为x64构建项目(而不是解决方案),请在命令行中指定它:
msbuild project.csproj /p:Platform=x64
注意,命令行用于.csproj,而不是.sln。
或者,验证Configuration Manger中的解决方案配置,并确保将其构建为x64。