【问题标题】:MSBuild: How to read Assembly Version and FIle Version from AssmeblyInfo.cs?MSBuild:如何从 AssmeblyInfo.cs 中读取程序集版本和文件版本?
【发布时间】:2018-09-12 10:11:23
【问题描述】:

使用 MSBuild 脚本如何从 AssemblyInfo.cs 中获取 AssmeblyVersion 和 FileVersion?

【问题讨论】:

    标签: visual-studio msbuild assemblyversions


    【解决方案1】:

    使用 MSBuild 脚本如何从 AssemblyInfo.cs 中获取 AssmeblyVersion 和 FileVersion?

    要通过 MSBuild 获取 AssmeblyVersion,您可以使用 GetAssemblyIdentity 任务。

    要完成此操作,请卸载您的项目。然后在项目的最后,就在结束标记 </Project> 之前,放置以下脚本:

      <Target Name="GetAssmeblyVersion" AfterTargets="Build">
        <GetAssemblyIdentity
            AssemblyFiles="$(TargetPath)">
          <Output
              TaskParameter="Assemblies"
              ItemName="MyAssemblyIdentities"/>
        </GetAssemblyIdentity>
    
        <Message Text="Assmebly Version: %(MyAssemblyIdentities.Version)"/>
      </Target>
    

    要获取FileVersion,您可以添加自定义MSBuild Inline Tasks 来获取它,编辑您的项目文件.csproj,添加以下代码:

      <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>
    
    
    
      <Target Name="GetFileVersion" AfterTargets="Build">
    
      <GetFileVersion AssemblyPath="$(TargetPath)">
        <Output TaskParameter="Version" PropertyName="MyAssemblyFileVersion" />
      </GetFileVersion>
      <Message Text="File version is $(MyAssemblyFileVersion)" />
      </Target>
    

    使用这两个目标后,您将从AssemblyInfo.cs 获得AssmeblyVersionFileVersion

    注意:如果要获取特定dll的版本,可以将AssemblyFiles="$(TargetPath)"改为:

    <PropertyGroup>
        <MyAssemblies>somedll\the.dll</MyAssemblies>
    </PropertyGroup>
    
    AssemblyFiles="@(MyAssemblies)"
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2011-04-20
      • 2018-05-05
      • 1970-01-01
      • 2011-04-10
      • 2010-10-28
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多