使用msbuild构建x64 c#项目会产生32位目标

时间:2013-04-01 15:38:12

标签: msbuild

我正在使用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特定路径。

1 个答案:

答案 0 :(得分:5)

如果您的解决方案的x6​​4配置配置为将项目构建为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。