TFS 2010中的"AnyCPU"和"Any CPU"有什么区别?

31

我花了很多时间尝试弄清楚为什么我在TFS2010上使用默认(空白)配置构建项目时没有问题,但如果我将其设置为其他任何配置,则会告诉我找不到输出路径。

最后,我发现在 .csproj 文件中,配置写成了AnyCPU,而对于TFS,推荐的下拉值是 Any CPU (注意空格)。

我移除了 TFS 配置中的空格,然后它就可以工作了。

该项目是从VS2008版本转换而来。微软是否更改了VS2010版本的配置名称?有人能告诉我发生了什么吗?


这个问题对于 TFS Build 有着很大的影响。在此处阅读更多信息:http://stackoverflow.com/questions/3156278/need-some-help-with-tfs2010-an-automated-build-configurations-to-build-de/7840115#7840115。 - Manders
1
只是补充一下 - 现在是2018年4月,我正在使用VS 2017,并且我进行了一段时间的故障排除,试图查看为什么输出路径存在问题,最终才意识到ANY CPU与ANYCPU问题。现在在VSTS中,我使用两个变量来构建sln和csproj的buildplatform。 - user2729765
3个回答

20

在VS2010中这似乎是一个已知的bug。
详见http://connect.microsoft.com/VisualStudio/feedback/details/503935/msbuild-inconsistent-platform-for-any-cpu-between-solution-and-project

我所发现的问题如下:

所有的项目文件都将平台设置为 “AnyCPU”,即使您在配置窗口中选择了 “Any CPU”。因此,如果您在 VS 中构建此解决方案,则一切正常。 当您尝试使用 TFS 的 “Any CPU” 平台进行构建时,解决方案可以正常工作,但必须在 msbuild 任务上设置项目使用 /p:AnyCPU。


1
我在使用TeamCity时也遇到了同样的问题,但是将名称重命名以去除空格后问题得到了解决。不幸的是,我相信大多数构建服务器都会遇到这个问题。 - Bobson
https://connect.microsoft.com/VisualStudio/feedback/details/932918/solution-and-project-have-different-values-for-any-cpu# - Paul Totzke
1
连接链接已经断开。 - rory.ap

10

(四年后...)

这个问题似乎在Visual Studio 2012中仍然存在。

今天,我无法部署我的服务项目的新版本,因为VS2012一直告诉我没有指定OutputPath...但是我已经指定,并且可以在项目的属性窗口中看到它。

我还尝试将我的服务部署到笔记本电脑上的本地驱动器,只是想看看VS是否会执行此操作。

但是,不行。它不会。

Ouch

我的配置实际上被称为“发布(PreProd)”(不带引号),但是当VS尝试将此名称放入路径时,似乎出现了口吃。

重新启动Visual Studio 2012没有效果,并且(在Google搜索解决方案后),我检查了一下我的机器上是否有“Platform”环境变量,这可能会干扰编译器的工作。

荒唐的解决方法是在文本编辑器中打开我的解决方案文件(.sln),然后从“Any CPU”替换为“AnyCPU”。

显然,真的很明显...!

2015年1月

只是补充一下,这个问题仍然存在。

最简单的解决方法实际上是将配置重命名,使其不包含空格或引号(即默认名称!!)

因此,通过将配置从发布(Prod)重命名为ReleaseProd,可以解决此问题。


5
在 Visual Studio 2013 中仍然存活着 :( - Chris Simmons
3
2016年7月在VS2015中仍然可用 :D - Lanka
请仅返回翻译后的文本:关注 - zahir
在我的构建输出中,我看到了“项目未设置OutputPath属性”的提示,并通过搜索结果找到了这里。在Microsoft.Common.CurrentVersion.targets文件中,这段代码<ProcessorArchitecture Condition=" '$(ProcessorArchitectureAsPlatform)' == 'AnyCpu' or '$(ProcessorArchitectureAsPlatform)' == 'Any Cpu'">msil</ProcessorArchitecture>让我想到微软已经尝试解决这个问题(或者至少是部分解决)。请注意:使用诊断级别日志记录时,我会在msbuild准备处理此潜在错误时看到此消息 - 但实际上我并没有遇到此错误,只是输出非常详细。 - unbob

4

我不确定是否每个项目都是 "AnyCPU"(无空格),但默认的目标名称是 "Any CPU",中间有一个空格。然而,需要指出的是,这些名称只是任意字符串,只要保持一致,你可以将它们设置为任何你喜欢的内容。


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