【问题标题】:Changing MSBuild properties from Powershell script从 Powershell 脚本更改 MSBuild 属性
【发布时间】:2019-11-18 06:54:56
【问题描述】:

我将以下目标 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

【问题讨论】:

    标签: powershell msbuild


    【解决方案1】:

    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 中。

    【讨论】:

      【解决方案2】:

      我不确定您要尝试做什么。但这可能是你要找的吗? .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"
      

      【讨论】:

      • 根据我的尝试,这不会更新属性,而只是属性的副本(按值传递)。
      猜你喜欢
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 2014-08-25
      • 2015-04-15
      • 2011-08-02
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多