msbuild任务读取dll的AssemblyFileVersion

msbuild任务读取dll的AssemblyFileVersion,msbuild,versioning,Msbuild,Versioning,我需要读取dll的AssemblyFileVersion,而不仅仅是Version。我试过: <Target Name="RetrieveIdentities"> <GetAssemblyIdentity AssemblyFiles="some.dll"> <Output TaskParameter="Assemblies" ItemName="MyAssemblyIdentities"/>

我需要读取dll的
AssemblyFileVersion
,而不仅仅是
Version
。我试过:

<Target Name="RetrieveIdentities">
    <GetAssemblyIdentity AssemblyFiles="some.dll">
        <Output
            TaskParameter="Assemblies"
            ItemName="MyAssemblyIdentities"/>
    </GetAssemblyIdentity>
    <Message Text="%(MyAssemblyIdentities.FileVersion)" />
</Target>

脚本运行,但不输出任何内容。如果我将
FileVersion
更改为
Version
,它将正确输出
AssemblyVersion
。如何使用脚本获取
AssemblyFileVersion

包中有一个可能有用的属性

更新:

从中,它看起来不像
GetAssemblyIdentity
任务返回
FileVersion

Assemblies参数输出的项包含项元数据 名为Version、PublicKeyToken和Culture的条目

另外,请参阅下面的StackOverflow post

借用,我能够创建自定义MSBuild任务:

<UsingTask
  TaskName="GetFileVersion"
  TaskFactory="CodeTaskFactory"
  AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">

  <ParameterGroup>
    <AssemblyPath ParameterType="System.String" Required="true" />
    <Version ParameterType="System.String" Output="true" />
  </ParameterGroup>
  <Task>
    <Using Namespace="System.Diagnostics" />
    <Code Type="Fragment" Language="cs">
      <![CDATA[
      Log.LogMessage("Getting version details of assembly at: " + this.AssemblyPath, MessageImportance.High);

      this.Version = FileVersionInfo.GetVersionInfo(this.AssemblyPath).FileVersion;  
    ]]>
    </Code>
  </Task>
</UsingTask>



然后从一个目标中消耗它:

<GetFileVersion AssemblyPath="some.dll">
  <Output TaskParameter="Version" PropertyName="MyAssemblyFileVersion" />
</GetFileVersion>
<Message Text="File version is $(MyAssemblyFileVersion)" />

这是一个老问题,但我也有同样的需要,我想知道这是否已经通过读取DLL而不是assemblyinfo.cs文件解决了?