[英]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'
param(
$ImageName
)
$name = $ImageName
$name = $name.ToLower()
$name = $name.Replace(".", "_")
write-host "Name is: $name"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.