我的MSBuild文件中有一个任务,如下所示:
<Exec command="net use $(DeploymentServerName) /user:username passwd" ContinueOnError="false" />
但是在控制台输出中它将转储命令:
...
net use $(DeploymentServerName) /user:username passwd
...
但是如果可能的话,我想隐藏凭证。我不关心命令输出的位置,我只关心命令本身没有回显到控制台。有什么想法吗?
答案 0 :(得分:13)
从.NET 4.0开始执行MSBuild任务得到属性EchoOFF,它允许实现这一点 - 抑制命令本身的回显(而不是命令输出)。完整文档为here。只需添加EchoOff =&#34; true&#34;到Exec属性列表。
答案 1 :(得分:1)
有几种可能的方法,一种是
<Target Name="DoHideCommand">
<Exec Command="MSBuild $(MsBuildThisFile) /t:SpecialCommand /nologo /noconsolelogger"/>
</Target>
<PropertyGroup>
<MyCommand>dir c:</MyCommand>
</PropertyGroup>
<Target Name="SpecialCommand">
<Exec Command="dir"/>
</Target>
这将调用单独的msbuild进程来调用实际目标,并隐藏所有输出结果
...
DoHideCommand:
MSBuild test.targets /t:SpecialCommand /nologo /noconsolelogger
...
这是另一个
<Target Name="SpecialCommandViaFile">
<PropertyGroup>
<TmpFile>tmp.bat</TmpFile>
</PropertyGroup>
<WriteLinesToFile File="$(TmpFile)" Lines="$(MyCommand)"/>
<Exec Command="$(TmpFile) > NUL 2>&1" WorkingDirectory="$(MsBuildThisFileDirectory)"/>
<Delete Files="$(TmpFile)"/>
</Target>
这会创建一个批处理文件来运行实际命令,然后将所有输出重定向到NUL,只显示以下内容:
...
SpecialCommandViaFile:
tmp.bat > NUL 2>&1
Deleting file "tmp.bat".
...
请注意,执行msbuild文件的文件总是可以打开文件来查看凭据,即使它们在运行时隐藏在输出中也是如此。