获取执行MSBuild的帐户的用户ID

获取执行MSBuild的帐户的用户ID,msbuild,Msbuild,我需要记录构建执行时所使用的域用户ID。我尝试点击WindowsIdentity.GetCurrent()。名称如下所示: <Target Name="Test123" BeforeTargets="BackupWebApp"> <PropertyGroup> <UserId>$([System.Security.Principal.WindowsIdentity]::GetCurrent().Name)</UserId>

我需要记录构建执行时所使用的域用户ID。我尝试点击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().Name)
但我承认这个错误:

类型为“System.Security.Principal.WindowsIdentity”的函数“GetCurrent”不能作为MSBuild属性函数执行

是否有其他方法可以获取执行构建的人员或服务帐户的用户ID

我知道$(用户名)-但我使用的是NTLM,没有指定用户ID或密码,所以它似乎总是空的


谢谢-

每当您想在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>


用户名=System.Security.Principal.WindowsIdentity.GetCurrent().Name;