使用 Any CPU 时,TeamCity .NET Runner 错误地引用了 Platform 属性

TeamCity .NET Runner is incorrectly quoting Platform property when Any CPU used

我有一些由 TeamCity 2020(最新版本)构建的 .NET Framework 项目。目前使用的是“MSBuild”Runner 类型——因为这已被弃用,我正在尝试将构建任务转换为使用新的“.NET”Runner 类型。尝试将参数中的 Platform 属性 设置为“Any CPU”时,TeamCity 最终会引用整个参数,这会导致 MSBuild 失败。

我正在为此 运行 设置以下属性:

当此构建 运行s 时,它失败了。在日志中,您可以看到 MSBuild 命令为 运行:
MSBuild.exe [solution file] /p:Configuration=[config parameter] "-property:Platform="Any CPU"" -verbosity:minimal -nodeReuse:false

因为 TeamCity 在 -property:Platform 参数周围放置了双引号,MSBuild 无法识别这一点并认为正在提供多个项目文件,因此它退出。

我试过对 'Any CPU' 使用单引号,删除 space,使用 /p:Platform 语法...相同的结果。

如何使用 .NET Runner 为“任何 CPU”平台构建 .NET Framework 项目?

最终对我有用的解决方案是创建一个新的解决方案平台,该平台基于现有的 "Any CPU",但名称为 AnyCpu。现在没有空格或引号混淆了。

在遇到与 TeamCity 类似的问题后,偶然发现了这个 post。我们正在使用 属性 开关将引用路径传递给构建过程。完整的开关是

/property:ReferencePath="\dllserver\referenceroot\.NET Framework 4"

然后导致臭名昭著的错误消息

msb1008: only one project can be specified

我的工作是在整个设置周围加上引号,而不仅仅是包含空格的部分 - 就像这样:

"/property:ReferencePath=\dllserver\referenceroot\.NET Framework 4"

也许这对其他人也有用。

最好的选择是通过T​​eamCity系统参数传递参数。

您的情况是:system.Platform=Any CPU

另一种选择是完全包装命令行参数:"/p:Platform=Any CPU"

另一种选择是 Jetbrains 将修复此有线行为。

据我所知,dotnet runner 的逻辑如下:如果文本字段中有任何白色 space(使用参数和构建配置进行测试),则整个字符串将被引号括起来。但是恕我直言,只有在没有其他报价的情况下才应该这样做。如果至少有一个引号,那么用户是有意添加的,TC 应该假设用户知道添加引号的原因。

提到的“MSBuild”Runner 正在正确处理带有白色 spaces 的参数。也许应该检查它的代码。

而当整个命令行参数都被引用时,则只能使用一个参数。加盟超过一元;那时会失败。

更新:
从 2021 年 6 月开始,TeamCity 版本 2021.1 现在可以使用以下命令行配置: "/P:Platform=Mixed Platforms" /P:OutputPath=..\build -restore

"/P:Platform=Mixed Platforms;OutputPath=..\build" -restore