2011-09-01 93 views
8

我需要阅读dll的AssemblyFileVersion而不是Version。我试过了:msbuild任务读取dll的AssemblyFileVersion

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

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

回答

4

MSBuild Extension包有一个MaxAssemblyFileVersion属性,可能会有用。

UPDATE:

documentation它看起来并不像GetAssemblyIdentity任务返回FileVersion

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

此外,请参阅以下StackOverflow后。

Read AssemblyFileVersion from AssemblyInfo post-compile

+0

这是一个老问题但我有同样的需求,并想知道这是否已经解决了阅读DLL而不是assemblyinfo.cs文件? –

2

this answer借款,我能够创建一个自定义的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)" />