使用MSBuild命令行保留属性

时间:2014-01-15 21:24:20

标签: asp.net msbuild

有没有办法指定包含保留属性的命令行属性,例如$(COMPUTERNAME)?

$msbuild /p:ComputerName="$(COMPUTERNAME)"

上面没有将保留属性$(COMPUTERNAME)解析为我的实际计算机名称(BMHEROLDW8),就像我在msbuild文件的propertyGroup中使用默认的ComputerName属性一样。

2 个答案:

答案 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。