c# - 在 32 位版本的 Windows (Teamcity) 上编译 x64

标签 c# .net msbuild 64-bit teamcity

我们的 Teamcity 代理目前在 32 位操作系统上运行,直到现在这都不是问题(我们现在可以在其中构建 x64 应用程序)。

我听说可以在 32 位操作系统上编译 x64 应用程序,但我从未这样做过。让 Teamcity 在 x64 中构建特定项目所需的步骤是什么 - 最好使用 MSBuild?

当我将项目的 MSBuild 属性“Run Platform”设置为 x64 时,我的代理给我以下警告:“未满足的要求:DotNetFramework4.0_x64 存在”

附带说明:我们最终会将代理转移到 64 位操作系统,但我想要一个短期解决方案。

最佳答案

我认为 TeamCity 中 MSBuild 的 Run Platform 是针对要使用的 MSBuild 版本的,它正在 C:\Windows\Microsoft.NET\Framework64\中寻找 MSBuild.exe v4.0.30319 文件夹,当您使用的是 32 位版本的 Windows 且未安装该框架时。但是,32 位版本的 MSBuild 可以调用仍然可以生成 x64 程序集的 C# 编译器,即使在您的 32 位计算机上也是如此。

您想要做的是为 x86 执行 Run Platform,但将 /property:Platform=x64 作为您的命令之一传递。如果您没有 x64 配置,您可以考虑尝试将其传递给 /property:Platform="Any CPU"。但是,只有当您在项目中引用的所有程序集也都设置为 Any CPU 时,Any CPU 才能保证工作。或者,您可以创建一个自定义配置,其中所有程序集都指定为 x64,然后通过命令行将其传递给 MSBuild。

请记住,如果您的任何项目是 C++,您将需要确保安装了 x64 编译器,因为我不认为它们是默认安装的。

关于c# - 在 32 位版本的 Windows (Teamcity) 上编译 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7855721/

相关文章:

c# - 通用转换功能似乎不适用于 Guids

iis-7 - Msbuild WebDirectorySetting 未设置enabledProtocols 设置

c# - log4net:使用 ILog 与 ILogger 之间的区别/优势是什么?

c# - 如何向 SQL Server 发出 LINQ 查询以检查列值是否以单词开头?

c# - 在 Reactive Extensions 中按预定义的顺序对 Observable 进行排序

c# - 如果已启动的进程处于打开状态,应用程序退出后套接字不会关闭

.net - Json.NET 在 .NET 4 下说 "operation may destabilize the runtime",但在 .NET 3.5 下不是

c# - 线程安全字典 C#

windows - 参见 .exe 的 std::cout

gitlab runner 请求的URL返回错误: 403