Подтвердить что ты не робот

Проблема Создание единого проекта с использованием msbuild с несколькими конфигурациями

Вопрос

Мы используем конфигурационные преобразования внутри нашего решения. Например: 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 файле

Вопрос

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Будет ли настройка switch/property /p:OutputPath=Test работать на вас? Он выведет DLL в каталог Test (я бы вам также мог использовать переменные TeamCity). Ссылка на аналогичный вопрос/ответ fooobar.com/questions/225176/...

Ответ 3

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

enter image description here

Ответ 4

Одним из простых решений было бы добавить новое свойство в ваши проекты под названием "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 через конфигурацию напрямую.

Ответ 5

Поместите условие OR для разных значений в 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>