Casper-SC
@Casper-SC
Программист (.NET)

Как подставлять в PostBuildEvents разные команды в зависимости от конфигурации решения?

Как сделать так, чтобы в PostBuildEvents для конфигурации Debug подставлялась команда для Windows, а при конфигурации Linux подставлялась команда для Linux?

Мне просто нужно копировать выходной файл в общий каталог для всех проектов в решении.

В Windows я копирую так: xcopy "$(TargetPath)" "$(SolutionDir)bin\$(ConfigurationName)\$(SolutionName)\" /Y

Я попробовал в файле проекта (*.csproj) заменить это:
<PropertyGroup>
    <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)bin\$(ConfigurationName)\$(SolutionName)\"  /Y</PostBuildEvent>
  </PropertyGroup>


На это:
<Choose>
    <When Condition="'$(Configuration)'!='Linux'">
      <PropertyGroup>
        <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)bin\$(ConfigurationName)\$(SolutionName)\"  /Y</PostBuildEvent>
      </PropertyGroup>
      <PropertyGroup>
        <PreBuildEvent>
        </PreBuildEvent>
      </PropertyGroup>
    </When>
    <Otherwise>
      <PropertyGroup>
        <PostBuildEvent></PostBuildEvent>
      </PropertyGroup>
    </Otherwise>
  </Choose>


Но это не работает в MonoDevelop, так как при построении проекта MonoDevelop выдаёт ошибку:
/usr/lib/mono/4.5/Microsoft.Common.targets: Error: Command 'xcopy "/home/MyName/Repos/SomeProject/OutdoorComponents/Config/bin/Release//Config.dll" "/home/MyName/Repos/SomeProject/bin/Release/SomeServer/" /Y' exited with code: 127. (Config)
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ashumkin
системный разработчик
дык, у тебя Configuration как раз не равен Linux, а равен (судя по тому, что используется в самом пути) Release

добавь другую переменную для контроля платформы сборки. Например, Platform
тогда будет
<When Condition="'$(Platform)'!='Linux'">
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы