有没有办法指定包含保留属性的命令行属性,例如$(COMPUTERNAME)?
$msbuild /p:ComputerName="$(COMPUTERNAME)"
上面没有将保留属性$(COMPUTERNAME)解析为我的实际计算机名称(BMHEROLDW8),就像我在msbuild文件的propertyGroup中使用默认的ComputerName属性一样。
答案 0 :(得分:2)
ComputerName是一个自动转换为MsBuild属性的系统环境变量。
从命令行,您将变量名称包装在百分号中(如果在启用了延迟扩展的批处理文件中,则为感叹号)
msbuild /p:ComputerName=%COMPUTERNAME%
答案 1 :(得分:0)
这对我有用:
将此文件另存为“OverrideEnvVariables.proj”
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="AllTargetsWrapper" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AllTargetsWrapper">
<CallTarget Targets="ShowOtherProperties" />
</Target>
<Target Name="ShowOtherProperties">
<Message Text=" " />
<Message Text=" " />
<Message Text=" Environment (SET) Variables* " />
<Message Text=" --------------------------- " />
<Message Text=" COMPUTERNAME = *$(COMPUTERNAME)* " />
<Message Text=" USERDNSDOMAIN = *$(USERDNSDOMAIN)* " />
<Message Text=" USERDOMAIN = *$(USERDOMAIN)* " />
<Message Text=" USERNAME = *$(USERNAME)* " />
</Target>
</Project>
创建一个.bat文件,并将其放入,然后运行它。
set __msbuildExe=C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
"%__msbuildExe%" /target:AllTargetsWrapper OverrideEnvVariables.proj /l:FileLogger,Microsoft.Build.Engine;logfile=AllTargetsWrapperNoOverride.log
"%__msbuildExe%" /target:AllTargetsWrapper OverrideEnvVariables.proj /p:ComputerName="Peanut" /l:FileLogger,Microsoft.Build.Engine;logfile=AllTargetsWrapperWithOverride.log
set __msbuildExe=
第二轮将“Peanut”显示为COMPUTERNAME。