Arg передан MsBuild, не распознан на PostBuildEvent - PullRequest
0 голосов
/ 29 октября 2019

У меня есть csproj-файл, который я хочу скомпилировать на моем jenkins-сервере, который содержит событие postbuild:

<PostBuildEvent>
    IF NOT DEFINED AAACOPYNEWONLY GOTO :EOF

    IF "%25AAACOPYNEWONLY%25" == "yes" (
        SET NEWOPT=/D
    ) ELSE (
        SET NEWOPT=
        RMDIR /S /Q "$(Outdir)\..\schema"
    )

    XCOPY /E /Y /I /Q %25NEWOPT%25 $(ProjectDir)..\schema "$(Outdir)\..\Schema"
</PostBuildEvent>

, когда я определяю AAACOPYNEWONLY как переменную системной среды в windowsвсе работает нормально, и папка schema копируется во все, на что ссылается ProjectDir.

Но когда я предоставляю переменную непосредственно в моем вызове msbuild, папка не создается:

msbuild MyProject.csproj -t:ReBuild -p:AAACOPYNEWONLY=NO

Я также просканировал свой лог-файл, но нет ничего, что бы указывало на то, что xcopy даже запустился, что заставляет меня предположить, что условие IF NOT DEFINED AAACOPYNEWONLY не соответствует.

Почему переменная неправильно передана всобытие, предоставляемое как arg для msbuild?

РЕДАКТИРОВАТЬ: я немного упростил мою пост-сборку, чтобы просто напечатать содержимое переменной:

<PostBuildEvent>
    echo AAACOPYNEWONLY = "%25AAACOPYNEWONLY%25"
</PostBuildEvent>

Это просто печатает AAACOPYNEWONLY = "".

1 Ответ

0 голосов
/ 29 октября 2019

Вы должны определить свое свойство в файле csproj таким же образом, как Configuration или Platform, например

<PropertyGroup>
...
   <AAACOPYNEWONLY Condition=" '$(AAACOPYNEWONLY)' == '' ">NO</AAACOPYNEWONLY>
...
</PropertyGroup>

Чем вы сможете передать его как параметр в команду msbuildлиния

...