【问题标题】:building x64 c# project with msbuild results in 32bit targets使用 msbuild 构建 x64 c# 项目会导致 32 位目标
【发布时间】:2013-04-01 15:38:11
【问题描述】:

我正在使用 Visual Studio 2010 构建一个同时具有 x86 和 x64 目标的 c# 项目。当我使用 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 中,我在日志文件中看到了这一行:

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

【问题讨论】:

  • 您使用什么命令行来运行 msbuild?您构建 sln 或 csproj 文件吗?具体的配置怎么传?
  • msbuild project.sln /p:Platform="x64" /t:Clean;Rebuild /p:Configuration=Debug
  • 日志Building solution configuration "Debug|x64"开头这一行的配置是否正确?你怎么理解结果不正确?创建了哪些输出目录 - bin\x86\Debugbin\x64\Debug
  • 是的,正在构建解决方案配置“Debug|x64”。所有东西都放在 bin\Debug 中。当我运行应用程序时,我在任务管理器中查看它是一个 x86 进程。如果我在具有 .Net 4.0 的服务器上构建它,或者如果我使用 IDE 构建它,我看不到这一点。

标签: msbuild


【解决方案1】:

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

【讨论】:

  • 谢谢!我能够将 /property:Prefer32bit=false 添加到我的 msbuild 命令行中,看起来可以解决问题。
  • 与 msbuild 一起使用什么开关来构建 64 位解决方案?
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多