Как переопределить свойство конфигурации? - PullRequest
5 голосов
/ 09 января 2012

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

Когда я выполняю следующим образом

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, даже если я не хочу.

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

Ответы [ 3 ]

4 голосов
/ 09 января 2012

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

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

Добавьте свойство платформы в командную строку:

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;Platform=AnyCPU" /verbosity:Diagnostic
2 голосов
/ 26 января 2015

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

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;OutputPath=C:\MyOutputPath" /verbosity:Diagnostic
1 голос
/ 28 августа 2014

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

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

<PropertyGroup>
    <OutputPath>$(DefaultOutputDirectory)</OutputPath>
</PropertyGroup>
...