Изменение свойств MSBuild из скрипта Powershell - PullRequest
0 голосов
/ 08 июля 2019

Я добавляю нижеуказанные целевые файлы xml в мой csproj (через пакет nuget)

<Project>
  <Target Name="AfterBuild">
    <PropertyGroup>
      <DockerExe Condition=" '$(DockerExe)'=='' ">"C:\Program Files\Docker\Docker\resources\bin\docker.exe"</DockerExe>
      <ImageName Condition=" '$(ImageName)'=='' ">$(MSBuildProjectName)</ImageName>
      <PowershellExe Condition=" '$(PowerShellExe)'=='' ">C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</PowershellExe>
    </PropertyGroup>
    <Exec Command="$(PowershellExe) -NonInteractive -executionpolicy Unrestricted -command $(MSBuildThisFileDirectory)..\tools\image_name.ps1" />
    <Exec Command="$(DockerExe) build -t $(ImageName) ." />
  </Target>  
</Project>

и image_name.ps1 содержит

$name = $(ImageName)
$name = $name.ToLower()
$name = $name.Replace(".", "_")

echo "Name is:"
echo $name

# $(ImageName) = $name

На самом деле вызывается скрипт Powershell, но $name$(ImageName)) равен null, и я понятия не имею, как получить доступ и обновить набор свойств ImageName в файле целей. Я пытался $name = $Env:ImageName, но результат этого задания был также null.

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Причина, по которой эти переменные в скрипте powershell равны nul, заключается в том, что powershell абсолютно ничего не знает о msbuild. И msbuild не сообщил powershell, какими должны быть значения.

В любом случае, все эти модификации строк в любом случае не нужны, поскольку msbuild может сделать это для вас, используя функции свойств: https://docs.microsoft.com/en-us/visualstudio/msbuild/property-functions?view=vs-2019

Таким образом, вам даже не нужно вызывать скрипт powershell, чтобы изменить строку для вас.

Последнее всего: Ответ Jakobii выше приведен для того, чтобы заставить скрипт PowerShell работать. Но, в конце концов, вы не сможете вернуть измененную строку из скрипта powershell обратно в msbuild.

0 голосов
/ 08 июля 2019

Я не совсем уверен, что вы пытаетесь сделать. но может ли это быть тем, что вы ищете? Файлы .ps1 могут иметь параметры, аналогичные двоичным файлам.

C:\path\to\image_name.ps1 -ImageName 'Some Image Name'

image_name.ps1

param(
    $ImageName
)
$name = $ImageName
$name = $name.ToLower()
$name = $name.Replace(".", "_")

write-host "Name is: $name"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...