我需要记录正在执行构建的域userid。我尝试使用WindowsIdentity.GetCurrent()。名称如下:
<Target Name="Test123" BeforeTargets="BackupWebApp">
<PropertyGroup>
<UserId>$([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)</UserId>
</PropertyGroup>
<Message Text="UserId : $(UserId)" Importance="high"/>
</Target>
但我这个错误:
“System.Security.Principal.WindowsIdentity”类型的“GetCurrent”函数不能作为MSBuild属性函数执行。
我是否可以通过其他方式获取执行构建的人员或服务帐户的用户ID?
我知道$(USERNAME) - 但我使用的是NTLM而没有指定用户ID或密码,所以它似乎总是空白。
谢谢 -
答案 0 :(得分:1)
每当您想在MsBuild中运行某些代码,并且它不能作为属性函数或类似函数使用时,请使用CodeTaskFactory。更多样板,但当然也更强大:
<UsingTask TaskName="GetUserName" TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll" >
<ParameterGroup>
<UserName ParameterType="System.String" Output="True"/>
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs">
UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
</Code>
</Task>
</UsingTask>
<Target Name="ShowUserName">
<GetUserName>
<Output PropertyName="UserName" TaskParameter="UserName" />
</GetUserName>
<Message Text="UserName = $(UserName)" />
</Target>