我花了很多时间尝试弄清楚为什么我在TFS2010上使用默认(空白)配置构建项目时没有问题,但如果我将其设置为其他任何配置,则会告诉我找不到输出路径。
最后,我发现在 .csproj 文件中,配置写成了AnyCPU
,而对于TFS,推荐的下拉值是 Any CPU
(注意空格)。
我移除了 TFS 配置中的空格,然后它就可以工作了。
该项目是从VS2008版本转换而来。微软是否更改了VS2010版本的配置名称?有人能告诉我发生了什么吗?
我花了很多时间尝试弄清楚为什么我在TFS2010上使用默认(空白)配置构建项目时没有问题,但如果我将其设置为其他任何配置,则会告诉我找不到输出路径。
最后,我发现在 .csproj 文件中,配置写成了AnyCPU
,而对于TFS,推荐的下拉值是 Any CPU
(注意空格)。
我移除了 TFS 配置中的空格,然后它就可以工作了。
该项目是从VS2008版本转换而来。微软是否更改了VS2010版本的配置名称?有人能告诉我发生了什么吗?
在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。
(四年后...)
这个问题似乎在Visual Studio 2012中仍然存在。
今天,我无法部署我的服务项目的新版本,因为VS2012一直告诉我没有指定OutputPath...但是我已经指定,并且可以在项目的属性窗口中看到它。
我还尝试将我的服务部署到笔记本电脑上的本地驱动器,只是想看看VS是否会执行此操作。
但是,不行。它不会。
我的配置实际上被称为“发布(PreProd)”(不带引号),但是当VS尝试将此名称放入路径时,似乎出现了口吃。
重新启动Visual Studio 2012没有效果,并且(在Google搜索解决方案后),我检查了一下我的机器上是否有“Platform”环境变量,这可能会干扰编译器的工作。
荒唐的解决方法是在文本编辑器中打开我的解决方案文件(.sln),然后从“Any CPU”替换为“AnyCPU”。
显然,真的很明显...!
2015年1月
只是补充一下,这个问题仍然存在。
最简单的解决方法实际上是将配置重命名,使其不包含空格或引号(即默认名称!!)
因此,通过将配置从发布(Prod)
重命名为ReleaseProd
,可以解决此问题。
<ProcessorArchitecture Condition=" '$(ProcessorArchitectureAsPlatform)' == 'AnyCpu' or '$(ProcessorArchitectureAsPlatform)' == 'Any Cpu'">msil</ProcessorArchitecture>
让我想到微软已经尝试解决这个问题(或者至少是部分解决)。请注意:使用诊断级别日志记录时,我会在msbuild准备处理此潜在错误时看到此消息 - 但实际上我并没有遇到此错误,只是输出非常详细。 - unbob我不确定是否每个项目都是 "AnyCPU"(无空格),但默认的目标名称是 "Any CPU",中间有一个空格。然而,需要指出的是,这些名称只是任意字符串,只要保持一致,你可以将它们设置为任何你喜欢的内容。