2012-01-08 3 views
5

Я пытаюсь сделать как 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, даже если я этого не хочу.

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

+0

Удалось ли вам найти способ обойти это? я сижу с той же проблемой, когда мое решение вызывает 19 файлов проекта, и все они по умолчанию используют Debug anycpu, хотя я устанавливаю его для выпуска на решение. –

ответ

4

В моих файлах проекта свойство 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 
+0

Я уже пробовал, но все равно получаю ту же ошибку. Не передавая конфигурацию или платформу, я верю, что она по умолчанию возвращается к Debug и AnyCPU соответственно для проектов, созданных с помощью VS – pmcgrath

+0

. Он использует MSBuild из командной строки. Он не модифицирует файлы проекта под текстовым редактором. – jww

1

Добавьте одно из следующих действий в файле проекта. Значение ошибки OutputPath переменная окружения не получает ее значения. Удалив «Условие =» из PropertyGroup, OutputPath всегда будет установлен для любой платформы или конфигурации по умолчанию.

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

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

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

c:\windows\microsoft.net\framework\v4.0.30319\msbuild.exe buildinv.proj /target:rebuild "/property:Configuration=Debug;OutputPath=C:\MyOutputPath" /verbosity:Diagnostic 
Смежные вопросы