获取执行MSBuild的帐户的UserId

时间:2016-04-26 18:34:48

标签: msbuild

我需要记录正在执行构建的域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或密码,所以它似乎总是空白。

谢谢 -

1 个答案:

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