簡體   English   中英

從Powershell腳本更改MSBuild屬性

[英]Changing MSBuild properties from Powershell script

我將以下目標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腳本中這些變量為nul的原因是因為powershell對msbuild完全一無所知。 而且,msbuild並沒有告知Powershell這些值應該是什么。

無論如何,所有字符串修改都是不必要的,因為msbuild可以使用屬性函數為您完成此操作: https ://docs.microsoft.com/zh-cn/visualstudio/msbuild/property-functions?view=vs-2019

因此,您甚至不需要調用powershell腳本來為您修改字符串。

最后:Jakobii的上述答案是使Powershell腳本正常工作的地方。 但是最后,您將無法將修改后的字符串從Powershell腳本中重新帶回msbuild中。

我不確定自己要做什么。 但這可能是您想要的嗎? .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"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM