Использование зарезервированных свойств командной строки MSBuild
Есть ли способ указать свойство командной строки, которое содержит зарезервированное свойство, например, $(COMPUTERNAME)?
$msbuild /p:ComputerName="$(COMPUTERNAME)"
Вышеприведенное не разрешает зарезервированное свойство $ (COMPUTERNAME) в фактическое имя моего компьютера (BMHEROLDW8), как это происходит со свойством ComputerName по умолчанию в propertyGroup моего файла msbuild.
2 ответа
ComputerName - системная переменная среды, которая автоматически преобразуется в свойство MsBuild.
В командной строке имя переменной можно обернуть в знаки процента (или восклицательные знаки, если в пакетном файле включено отложенное расширение).
msbuild /p:ComputerName=%COMPUTERNAME%
Это работает для меня:
Сохраните этот файл как "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=
Второй прогон показывает "Арахис" в качестве имени компьютера.