“outputpath属性未设置于此项目”错误。

90

我在Visual Studio 2008中有一个多项目解决方案。我刚刚添加了一个名为Release-VersionIncrement的新配置到该解决方案中,将“使用发布”配置指定为基线。所有项目文件都已更新为该配置。但是,当我尝试编译使用此配置的特定项目时,我会收到以下错误:

  

Error 5 输出路径属性未设置该项目。请确保您已指定有效的Configuration/Platform组合。Configuration='Release-VersionIncrement' Platform='AnyCPU' C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets 539 9 DataConversion

这里发生了什么?该项目在Release或Debug配置中编译正常。


6
我为此苦苦挣扎数小时,直到意识到 TFS 构建定义中的下拉列表中有“Any CPU”,而不是“AnyCPU”!!! - The Muffin Man
1
在VS2012中,构建配置的下拉菜单是“Any CPU”,但在.csproj文件中是“AnyCPU”,因此在Jenkins或命令行中使用“AnyCPU”将起作用。 - Jirong Hu
28个回答

94
通常情况下,这是因为项目文件的OutputPath属性为空。项目文件只是MSBuild文件。在Visual Studio中进行编辑:右键单击项目,选择“卸载项目”,然后右键单击已卸载的项目并选择“编辑…”。
查找Release-Versionincrement属性组,它应该看起来像这样:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release-VersionIncrement|AnyCPU' ">
  <OutputPath>bin\Release-VersionIncrement\</OutputPath>
  <DefineConstants>TRACE</DefineConstants>
  <Optimize>true</Optimize>
  <DebugType>pdbonly</DebugType>
  <PlatformTarget>AnyCPU</PlatformTarget>
  <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
  <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
  <ErrorReport>prompt</ErrorReport>
</PropertyGroup>

其中最重要的是OutputPath,你的项目文件中是否存在?如果不存在,请添加并重试。


33
如果输出路径正确但仍然出现此错误,可能存在对程序集或其他项目的引用已经不存在了。清除旧的引用。这是我的经验。 - John K
3
我刚刚偶然发现了这个错误,不得不直接修改项目文件。尽管项目属性页面显示“Any CPU”,但属性最初被设置为空白,并从我的环境变量中选择了一个Platform=BPC设置。即使我将属性页面从Any CPU更改为x86,然后再次设置/重置它,它仍无法构建,声称平台现在是“x86”(?!)。果然,我按照这里的步骤操作,发现它现在被设置为x86,因此我手动编辑了它,现在所有人都很满意了。谢谢大家! - DaveN59
2
我的项目文件有预期的PropertyGroup,具有非空的OutputPath,但我仍然遇到了错误。唯一注意到的是,这个特定配置的PropertyGroup是文件中根节点下的第一个元素,并且Condition属性没有前导和尾随空格,而其他所有配置条件都有。此时,我将此元素移动到其他配置之下(不确定为什么会有影响,只是尝试了一些东西),并在条件中添加了空格。之后它就可以工作了。不确定哪个起了作用。 - Seth Flowers
2
我又遇到了一个问题。我使用SlowCheetah为我的Windows项目创建配置转换。这些配置没有像@sethflowers建议的那样有空格。我添加了它们,但没有帮助。我发现在配置之间还有另一个属性组。所以我解决了这个问题(只是将属性组放在项目配置属性组下面),然后问题就解决了。感谢这里所有的建议。这节省了我的时间!!! - LockTar
7
一定要尝试使用\p:Platform="AnyCPU"而不是\p:Platform="Any CPU"。这对我很有效!我为此看了很久! - Lee Englestone
显示剩余2条评论

80

当我们的构建代理配置为运行平台“任何CPU”(在Visual Studio中显示为空格),而不是“AnyCPU”(在项目文件中指定为一个单词)时,我也见过这个错误。


6
我遇到了相同的问题,看起来在解决方案级别上,“Any CPU”是有效的,但在项目级别上,是“AnyCPU”。换句话说,msbuild myproj.sln /p:Configuration=Debug /p:Platform="Any CPU" 是可以的,然而在构建项目时,我必须省略 Any CPU 中的空格:msbuild myproj.proj1.csproj /p:Configuration=Debug /p:Platform=AnyCPU,以避免输出路径属性错误。 - Emil G
2
真是不可思议,这对于CI配置来说真是个大麻烦。我已经为此苦苦挣扎了好几天。 - Jeremy Holovacs
当我无法在主构建服务器上构建时,我遇到了这个错误,而我选择的备用服务器传递了“Any CPU”而不是“AnyCPU”。经过检查,MSBUILD和其他软件的版本号存在一些差异。感谢您的答复。 - Gilles
1
我简直不敢相信,空格竟然是罪魁祸首! - Alexandra

37

当我第一次使用MSBuild时,我也遇到了同样的问题。我的解决方案是:一定要使用OutputPath属性。像这样:

msbuild XXX.csproj /p:OutputPath=bin\Debug.

这解决了我的问题,适用于TeamCity Azure云服务构建。+1 - starmandeluxe
同样对我来说,使用VSO的CI构建也是如此。 - StriplingWarrior

11
在我们的情况下,我们在我们的HP开发者机器上运行构建脚本。 HP为他们自己的目的设置了一些环境变量之一是PLATFORM(显然用于“HP Easy Setup”)。
删除PLATFORM环境变量即可解决问题。
您还可以通过指定平台来使您的构建脚本具有未来可扩展性,例如:
msbuild /p:Platform=AnyCPU

1
这个问题困扰了我新买的惠普笔记本电脑 - 感谢@Boggin - 我自己不会想到这个。 - Rob Cooper

9
如果Visual Studio明确地报告“Platform ='BPC'”错误,则可以通过删除“Platform”环境变量来轻松解决此问题。 删除这个选项 现在重新启动Visual Studio,您就可以继续使用了。

6

正如所说的那样,在.wixproj文件中,必须设置OutputPath并将其放置在<Import Project="$(WixTargetsPath)" />之前。


这个与我的问题有关,我在创建一个wix项目后添加了一个新的配置,但是新的配置被添加到文件末尾,所以所有相关的PropertyGroups都放在了这个导入之后,将它们移到顶部,紧挨着其他的配置,对我来说解决了问题。 - Eugenio Miró

6

正如“Richard Dingwall”所暗示的,问题与VS使用“Any CPU”的display版本有关,而不是实际读取“AnyCPU”的MSBuild版本。

进入构建/新建构建定义或编辑构建定义 -> 进程 -> 配置以进行构建,打开配置选择对话框,在“平台”中,手动添加“AnyCPU”,而不是选择“Any CPU”。


4
今天我要将x64平台添加到我的解决方案中,但遇到了这个问题。
在我的情况下,错误信息如下:
“为默认目标构建 $/ProjectDirectory/ProjectName.csproj。 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (484):未为项目 ProjectName.csproj 设置 OutputPath 属性。请确保您已为此项目指定了有效的 Configuration 和 Platform 组合。Configuration='Debug' Platform='x64'。您可能会看到此消息是因为您正在尝试构建一个没有解决方案文件并且已指定不存在于该项目中的非默认 Configuration 或 Platform 的项目。”
我知道 OutputPath 应该没问题,因为这是一个现有的、工作正常的 VS 解决方案。所以我转向下一个提示——“有效的 Configuration 和 Platform 组合”。
哦!Visual Studio 正在尝试构建 “Configuration='Debug', Platform='x64'” 。查看我的项目文件后,我意识到 x64 没有列在可能的平台之一。换句话说,我有以下条目(缩短):
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
      <PlatformTarget>x86</PlatformTarget>
      <OutputPath>bin\x86\Debug\</OutputPath>  
      . . .  
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
      <PlatformTarget>x86</PlatformTarget>
      <OutputPath>bin\x86\Release\</OutputPath>    
      . . .
  </PropertyGroup>

很简单的解决方法:只需要添加x64项!

我复制/粘贴了x86的条目,并将它们改为使用x64。请注意,我还修改了路径,以避免覆盖x86版本:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
      <PlatformTarget>x64</PlatformTarget>
      <OutputPath>bin\x64\Debug\</OutputPath>    
      . . .
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
      <PlatformTarget>x64</PlatformTarget>
      <OutputPath>bin\x64\Release\</OutputPath>    
      . . .
  </PropertyGroup>

4

我已经移除了名为 BNB 或类似的 Platform 环境变量。问题已解决。


1
很不幸的是,即使删除平台环境变量,它仍需要完全重新启动! - 79E09796

3
我曾经也遇到过类似的问题,经过一番努力排查后,我尝试了卸载、重新构建和重新加载引起问题的项目,在解决方案中进行操作,此后MSBuild功能正常运行。

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