Visual Studio 2010 $(PlatformName) 宏与 MSBuild.exe 不兼容。

4

我有一个C#项目在Visual Studio 2010中,其预构建事件命令行为:

echo "$(Configuration)" - "$(PlatformName)" - "$(Platform)"
exit 1

结果如下:

"Debug" - "AnyCPU" - "AnyCPU"

尽管该窗口的宏部分表明在这种情况下PlatformName应该显示为Any CPU(带有空格):http://i.imgur.com/xb3Y8.png(尽管MSDN似乎表明在http://msdn.microsoft.com/en-us/library/42x5kfw4.aspx中没有空格)。
msbuild /property:Configuration="Debug" /property:Platform="AnyCPU"
1>MyProgram.sln.metaproj : error MSB4126: The specified solution configuration "Debug|AnyCPU" is invalid.

这里发生了什么?不幸的是,命令行上的“AnyCPU”不是一个有效的平台,所以我无法继续进行。使用/property:Platform="Any CPU"(有一个空格)可以正常工作。
是否有其他宏可以使用,或者MSBuild有一些标志可以接受该平台?
1个回答

6

看起来你遇到了MSBuild bug 503935

报告:

当你构建解决方案或项目时,msbuild平台属性的值对于任意CPU是不同的。

解决方案使用Platform="Any CPU" - 有空格

项目使用Platform="AnyCPU" - 没有空格

回复:

Microsoft在2009年11月2日下午7:22发布了回复。

感谢您抽出时间给我们提供反馈。

很遗憾,由于Beta 2刚刚发布,现在进行调整为时已晚。让这两个值相同是非常合理的。看起来我们应该对两者都使用"AnyCPU"并保持一致。我们还需要确保向后兼容,因此我们必须考虑到这一点。

在下一个版本中,我们希望能够围绕解决方案做一些工作,也许可以在那个周期内修复这个问题。对于这个版本,我将此错误标记为“不会修复”。

谢谢,

Chuck England

Visual Studio平台程序经理-MSBuild

最终解决方案:

标记为"不会修复"


嗯,那就这样吧。批处理文件中的“if”语句暂时解决了这个问题。 - wes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接