7

我正在使用 Visual Studio 2010 构建具有 x86 和 x64 目标的 ac# 项目。当我使用 IDE 构建时,我得到了 x64 和 x86 目标的正确结果。

当我在命令行上使用 msbuild 时,我得到的一切都是在 x86 中构建的,即使我在命令行上指定了 x64。

在我从 .Net 4.0 升级到 .Net 4.5 之前,我没有这个问题。

使用 .Net 4.0,即使我在命令行上指定了 x86,我也能够获得我的 x64 目标。

我在 .Net 4.0 环境中进行了构建,然后在 .Net 4.5 环境中进行了另一个构建,并将输出通过管道传输到日志文件中。我注意到日志文件中存在一些差异,但我认为这是导致我的问题的原因:

在 .Net 4.0 中,我在日志文件中看到这一行:

/参考: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 特定路径。

4

1 回答 1

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。

或者,在配置管理器中验证您的解决方案配置,并确保它构建为 x64。

于 2013-04-02T03:34:45.150 回答