Как переопределить свойство конфигурации?

Я пытаюсь создать как Release, так и Debug сборки на .Net v4.0, где у меня есть файл проекта MSBuild, а не файл решения. Я хочу использовать тот же файл проекта сборки, но просто переопределить переключение свойства Configuration между «Debug» и «Release».

Когда я выполняю следующее

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj
/target:rebuild "/property:Configuration=Debug" /verbosity:Diagnostic

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

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9):
error : The OutputPath property is not set for project
'buildinv.proj'.  Please check to make sure that you have specified a
valid combination of Configuration and Platform for this project. 
Configuration='Debug'  Platform=''.

Я вижу, что ошибка возникает в _CheckForInvalidConfigurationAndPlatform.

Однако если я передам свойство OutputPath, оно будет работать

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj
/target:rebuild "/property:Configuration=Debug" "/property:OutputPath=."

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

Заранее спасибо.


person pmcgrath    schedule 08.01.2012    source источник
comment
Удалось ли вам это обойти? Я сижу с той же проблемой, когда мое решение вызывает 19 файлов проекта, и все они по умолчанию используют Debug anycpu, хотя я устанавливаю его для выпуска в решении   -  person Steven Dall    schedule 30.07.2013


Ответы (3)


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

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

Добавьте свойство Platform в командную строку:

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;Platform=AnyCPU" /verbosity:Diagnostic
person Ludwo    schedule 09.01.2012
comment
Я уже пробовал это, но все равно получаю ту же ошибку. Не передавая конфигурацию или платформу, я полагаю, что по умолчанию он возвращается к Debug и AnyCPU соответственно для проектов, созданных с помощью VS - person pmcgrath; 09.01.2012
comment
Он использует MSBuild из командной строки. Он не изменяет файлы проекта в текстовом редакторе. - person jww; 24.10.2015

Если вы не хотите изменять файл проекта, вы также можете просто указать OutputPath для сборки в своей команде:

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;OutputPath=C:\MyOutputPath" /verbosity:Diagnostic
person grenade    schedule 26.01.2015

Добавьте в файл проекта одно из следующего. Ошибка означает, что переменная среды OutputPath не получает своего значения. Если удалить "Condition =" из PropertyGroup, OutputPath всегда будет установлен для любой платформы или конфигурации по умолчанию.

<PropertyGroup>
  <OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>

<PropertyGroup>
    <OutputPath>$(DefaultOutputDirectory)</OutputPath>
</PropertyGroup>
person user1026235    schedule 27.08.2014