Свойство OutputPath не установлено, ошибка возникает только при вызове MSBuild в CCNET

Я создал проект MSBuild, который просто выполняет задачу msbuild с нашим файлом решения в качестве параметра. Я определил цель BeforeBuild, в которой я установил некоторые свойства, и цель сборки, которая выполняет задачу msbuild.

Я подтвердил, что при построении скрипта msbuild в консоли командной строки ошибок не было. Однако когда я использую его в задаче msbuild в моем проекте CCNET, я продолжаю получать следующую ошибку:

C: \ Windows \ Microsoft.NET \ Framework \ 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 продолжает получать ошибку, и я не знаю, что еще попробовать.

Пожалуйста помоги.


person LostInCCNET    schedule 03.06.2010    source источник
comment
Это помогает? blogs.msdn.com/b/brandonwerner/archive/2010/03/14/   -  person Craig Stuntz    schedule 08.11.2010
comment
Можете ли вы опубликовать задачу msbuild, используемую внутри CC.NET?   -  person alexandrul    schedule 15.12.2010


Ответы (2)


Я обнаружил, что у меня была аналогичная ситуация (но с использованием 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 не было проблем с моим сценарием сборки.

person David Montgomery    schedule 14.12.2010
comment
Это было именно то, что мне было нужно. Без этого ответа я очень сомневаюсь, что когда-либо смог бы это отследить. - person Chris Marisic; 23.05.2012
comment
Если кто-то еще сталкивается с этим, первые строки принадлежат исходной группе свойств, а в моем случае строка платформы вообще отсутствовала. Добавление его устранило проблему с TeamCity. - person yieldvs; 07.10.2014

Мне помог ответ Дэвида. Но позже я нашел реальный источник проблемы на своем компьютере. Переменная среды PLATFORM добавляется на компьютеры HP и влияет на ряд различных сценариев с Visual Studio.

Перейдите в Переменные среды-> Системные переменные и удалите «ПЛАТФОРМУ» из списка.

Дополнительные сведения см. Здесь: 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

person Roman Podlinov    schedule 24.03.2011
comment
Спасибо за дополнительную информацию. Должно быть, это была настоящая ошибка, которую нужно было решить! - person David Montgomery; 14.09.2011
comment
в моем случае на самом деле все сводилось только к добавлению дополнительных групп свойств в платформу, иногда люди настраивают ее (вводят другое имя, например MyAcceptance), а затем круиз-контроль вызывает эту ошибку. Таким образом, вы должны добавить это имя также в исходный код csproj - person Junior Mayhé; 14.05.2012