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

请您参考如下方法:

如果您的解决方案的 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。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!