“未设置OutputPath属性”仅在CCNET中调用MSBuild时才会发生错误

时间:2010-06-03 10:09:32

标签: cruisecontrol.net ccnet-config msbuild-4.0

我已经制作了一个MSBuild项目,它只使用我们的解决方案文件作为参数执行msbuild任务。我已经定义了一个BeforeBuild目标,我设置了一些属性,以及一个执行msbuild任务的Build目标。

我已经确认在命令行控制台中构建msbuild脚本时没有发生错误。但是,当我在CCNET项目的msbuild任务中使用它时,我不断收到以下错误:

  

C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets   (483,9):错误:OutputPath   属性未设置为项目   'MyProject.msbuild'。请检查   确保你已经指定了一个   配置和的有效组合   这个项目的平台。   配置=“调试”   平台= 'AnyCPU'。你可能会看到   这条消息因为你正在努力   建立一个没有解决方案的项目   文件,并指定了非默认值   配置或平台没有   这项目存在。

我检查了构建日志,似乎在_CheckForInvalidConfigurationAndPlatform期间发生了错误。它甚至无法继续我的构建任务!由于该脚本仅用于在Debug / Release和AnyCPU下构建解决方案作为平台,因此我尝试将以下行添加到我的msbuild项目中:

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

我仍然可以在命令行中无错误地构建项目,但是CCNET返回了上面提到的相同错误。

我不明白为什么CCNET会一直收到错误,我不知道还有什么可以尝试。

请帮忙。

2 个答案:

答案 0 :(得分:10)

我发现我有类似的情况(但使用TeamCity作为我的CI环境)。在我的特定情况下,该项目是一个命令行应用程序。为了解决这个问题,我不得不手动编辑我的项目文件。

找到这些行:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>

将第二行更改为:

<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

在项目文件中找到其他特定于平台的行并进行更改。例如:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">

变为:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

我怀疑我们的构建服务器是64位,而Studio中的控制台应用程序项目类型不允许您使项目适合AnyCPU平台......

完成这些更改后,TeamCity对我的构建脚本没有任何问题。

答案 1 :(得分:3)

大卫的回答帮助了我。但后来我发现了计算机问题的实际来源。 PLATFORM 环境变量已添加到HP计算机上,并且确实会影响Visual Studio中的许多不同方案。

进入环境变量 - &gt;系统变量并从列表中删除“PLATFORM”。

请在此处查看其他详细信息:http://blogs.msdn.com/b/jnak/archive/2010/03/24/outputpath-property-is-not-set-for-project-error-when-building-a-windows-azure-cloud-service-in-vs-2010.aspx