msbuild任务读取DLL的AssemblyFileVersion

O.O*_*O.O 8 versioning msbuild

我需要阅读AssemblyFileVersiondll而不仅仅是Version.我试过了:

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

该脚本运行但不输出任何内容.如果我改变FileVersionVersion它正确输出AssemblyVersion.我如何AssemblyFileVersion使用我的脚本?

lc.*_*lc. 5

这个答案中借用,我能够创建一个自定义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>
Run Code Online (Sandbox Code Playgroud)

然后从目标中使用它:

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


Gar*_*ett 4

MSBuild扩展包有一个可能有用的MaxAssemblyFileVersion属性。

更新:

文档来看,任务似乎没有GetAssemblyIdentity返回FileVersion.

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

另请参阅以下 StackOverflow 帖子。

编译后从 AssemblyInfo 读取 AssemblyFileVersion