Использование зарезервированных свойств командной строки 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=

Второй прогон показывает "Арахис" в качестве имени компьютера.

Другие вопросы по тегам