2011-09-01 34 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)" />