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

使用msbuild构建x64 c#项目会产生32位目标,msbuild,Msbuild,我正在使用VisualStudio2010构建一个同时具有x86和x64目标的c#项目。当我使用IDE构建时,我得到了x64和x86目标的正确结果 当我在命令行上使用msbuild时,即使我在命令行上指定了x64,我也可以在x86中生成所有内容 在从.NET4.0升级到.NET4.5之前,我没有这个问题 使用.NET4.0,即使在命令行上指定了x86,我也能够获得x64目标 我在.NET4.0环境中进行了一次构建,然后在.NET4.5环境中进行了另一次构建,并将输出通过管道传输到日志文件中。我注

我正在使用VisualStudio2010构建一个同时具有x86和x64目标的c#项目。当我使用IDE构建时,我得到了x64和x86目标的正确结果

当我在命令行上使用msbuild时,即使我在命令行上指定了x64,我也可以在x86中生成所有内容

在从.NET4.0升级到.NET4.5之前,我没有这个问题

使用.NET4.0,即使在命令行上指定了x86,我也能够获得x64目标

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

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

/参考:C:\Windows\Microsoft.Net\assembly\GAC\U MSIL\Microsoft.CSharp\v4.0\U 4.0.0.0\Uuu b03f5f7f11d50a3a\Microsoft.CSharp.dll

在.Net 4.5中,我在日志文件中看到这一行: /r:“C:\ProgramFiles(x86)\Reference Assembly\Microsoft\Framework.NETFramework\v4.0\Microsoft.CSharp.dll”


有什么想法吗?Net 4.5正在使用x86特定路径。

如果将解决方案的x64配置配置为将项目构建为AnyCPU,则可能会发生这种情况。Net 4.5中的一个新配置选项使带有Prefer32bit标志的可执行文件在64位机器上作为32位进程启动。由于Prefer32bit标志是MSBuild目标中的默认标志,因此您将看到所描述的行为,即从.Net 4.0升级到.Net 4.5将使您的AnyCPU项目从64位切换到32位

要为x64生成项目(非解决方案),请在命令行中指定它:

msbuild project.csproj /p:Platform=x64
请注意,命令行用于.csproj,而不是.sln


或者,在configuration Manager中验证您的解决方案配置,并确保其生成为x64。

您使用什么命令行来运行msbuild?您是否构建sln或csproj文件?如何传递特定配置?msbuild project.sln/p:Platform=“x64”/t:Clean;Rebuild/p:Configuration=Debug在日志
构建解决方案配置“Debug | x64”
的开头这一行中的配置是否正确?您如何理解结果不正确?创建了哪些输出目录-
bin\x86\Debug
bin\x64\Debug
?是,生成解决方案配置“Debug | x64”。所有东西都放在bin\Debug中。当我运行应用程序时,我查看任务管理器,发现它是一个x86进程。我看不出我是在拥有.NET4.0的服务器上构建它,还是使用IDE构建它。谢谢!我能够将/property:Prefer32bit=false添加到我的msbuild命令行中,看起来这解决了问题。要将解决方案生成为64位,使用msbuild的哪个开关?