Проблема Построение одного проекта с использованием msbuild с несколькими конфигурациями. - PullRequest
27 голосов
/ 15 января 2012

Issue

Мы используем преобразования конфигурации внутри нашего решения.Например: Debug, Test, Staging, Release Однако эти конфигурации используются только в наших проектах MVC.все библиотеки используют только Debug и Release, что имеет больше смысла, поскольку наши библиотеки должны быть собраны либо в режиме отладки, либо в режиме выпуска.

Проблема возникает при попытке создать один проект изкомандная строка.Я должен быть в состоянии сделать это для автоматического развертывания наших сборок из TeamCity в нашу среду тестирования.

Когда я строю один проект, подобный этому

msbuild myproject.csproj 
/t:Build 
/P:Configuration=Test 
/P:Platform=AnyCPU 
/P:DeployOnBuild=True 
/P:DeployTarget=MSDeployPublish 
/P:MsDeployServiceUrl=https://SERVER:8172/MsDeploy.axd 
/P:AllowUntrustedCertificate=True 
/P:MSDeployPublishMethod=WMSvc 
/P:CreatePackageOnPublish=True 
/P:UserName=Username 
/P:Password=Passsword 
/P:DeployIisAppPath="IISAPPPATH"

я получаю следующую ошибку

myproject.csproj" (Build target) (1) ->
"C:\src\myproject.csproj" (default target) (18) ->
  c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9)
: error : The OutputPath property is not set for project 'sampleLibrary.csproj'.  
Please check to make sure that you have specified a valid combination of
 Configuration and Platform for this project.  Configuration='Test'
  Platform='AnyCPU'.  You may be seeing this message because you are trying
 to build a project without a solution file, and have specified a
 non-default Configuration or Platform that doesn't exist for this project.

Я знаю, что это значит, потому что моя sampleLibrary не имеетКонфигурация для теста, и отображение для sampleLibrary будет содержаться в моем файле .sln

Вопрос

Есть ли способ решить эту проблему без добавления этих конфигурацийдля каждого библиотечного проекта?Здесь пахнет уродливым хаком.

Ответы [ 5 ]

10 голосов
/ 25 сентября 2012

Будет ли настройка переключателя / свойства /p:OutputPath=Test работать для вас? Он выведет dll в каталог с именем Test (я думаю, вы также можете использовать переменные TeamCity). Ссылка на аналогичный вопрос / ответ https://stackoverflow.com/a/1083362/90033

6 голосов
/ 16 января 2012

К сожалению, вам придется изменить каждый проект, который используется в решении, чтобы иметь один и тот же путь сборки.

Однако это довольно легко сделать, если все ваши проекты строятся по одному путинезависимо от конфигурации: на вкладке Build свойств проекта выберите All Configurations в раскрывающемся списке Configuration, а затем измените Output path.

Это создаст записи для всех конфигураций в файле проекта, которые еще не существуют, и установит одинаковый путь вывода для всех конфигураций.

5 голосов
/ 17 апреля 2017

Используя tfs онлайн, я получил ту же ошибку, это решило мою проблему

enter image description here

2 голосов
/ 25 сентября 2012

Поместите условие ИЛИ для различных значений в Release для максимально возможного количества различных конфигураций.

например.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' Or '$(Configuration)|$(Platform)' == 'Test|AnyCPU'">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
2 голосов
/ 17 января 2012

Одним из простых решений было бы добавить новое свойство в ваши проекты под названием «DeploymentConfiguration» и сделать так, чтобы оно отображало конфиги.Пример:

  <!-- this is your non-deployment DLL -->
  <!-- Default DeploymentConfiguration to 'Debug' -->
 <DeploymentConfiguration Condition="'$(DeploymentConfiguration)'==''">Debug</DeploymentConfiguartion>
 <Configuration Condition='$(DeploymentConfiguration)'=='Test'">Debug</Configuration>

Затем при вызове MSBuild передайте

 /p:DeploymentConfiguration=Test

В MVC развертывания вы просто назначите DeploymentConfiguration напрямую для Configuration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...