【问题标题】:dotnet core package versioningdotnet 核心包版本控制
【发布时间】:2017-12-07 19:51:57
【问题描述】:

如何使用dotnet CLI 基于 Git 中的标签为 NuGet 包(eg MyCode.0.1.1.nupkg)生成语义版本号?

GitInfo 正在正确地对我们的程序集进行版本控制,但我想将此扩展到对我们的 NuGet 包进行版本控制。以下是来自我们的 .csproj 的 sn-p:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PackageVersion>$(GitSemVerMajor).$(GitSemVerMinor).$(GitSemVerPatch)$(GitSemVerDashLabel)</PackageVersion>
  </PropertyGroup>
  <ItemGroup>
    <Compile Include="..\..\GlobalAssemblyInfo.cs" Link="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="gitinfo" Version="1.1.66" />
  </ItemGroup>
</Project>

注意GeneratePackageOnBuild

我必须做什么来生成这些构建变量,$(GitSemVerMajor)。当我打电话给dotnet build

【问题讨论】:

    标签: git nuget .net-core csproj semantic-versioning


    【解决方案1】:
    • .csproj 中删除&lt;PackageVersion&gt; 行。
    • InitialTargets 语句添加到Project:
      &lt;Project Sdk="Microsoft.NET.Sdk" InitialTargets="SetVersion"&gt;
    • 为版本控制目标文件添加Import
      &lt;Import Project="..\..\Version.targets" /&gt;

    Version.targets 文件:

    <?xml version="1.0" encoding="utf-8"?>
    <Project 
        xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
            <Target Name="GitVersion">
            <PropertyGroup>
                <!-- Dummy values allow dotnet restore to progress -->
                <GitBaseVersionMajor>0</GitBaseVersionMajor>
                <GitBaseVersionMinor>1</GitBaseVersionMinor>
                <GitBaseVersionPatch>0</GitBaseVersionPatch>
                <GitCommits>0</GitCommits>
            </PropertyGroup>
        </Target>
        <Target Name="SetVersion" DependsOnTargets="GitVersion">
            <PropertyGroup>
                <!-- CI checkouts may be against a specific commit, not a branch, so add -pr as label -->
                <GitSemVerDashLabel Condition="'$(GitBranch)' == 'undefined'">$(GitSemVerDashLabel)-pr</GitSemVerDashLabel>
                <!-- If there's no label, but we're not at the tip of the base version, add a -pre because this is not the base build -->
                <GitSemVerDashLabel Condition="'$(GitSemVerDashLabel)' == '' And '$(GitCommits)' != '0'">-pre</GitSemVerDashLabel>
                <PackageVersion Condition="'$(GitSemVerDashLabel)' == ''">$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch)</PackageVersion>
                <PackageVersion Condition="'$(GitSemVerDashLabel)' != ''">$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch)$(GitSemVerDashLabel).$(GitCommits)</PackageVersion>
                <AssemblyVersion>$(GitBaseVersionMajor).$(GitBaseVersionMinor).$(GitBaseVersionPatch)</AssemblyVersion>
            </PropertyGroup>
        </Target>
    </Project>
    

    【讨论】:

      【解决方案2】:

      我为 .NET Core 项目版本控制 here 制作了一个 CLI 工具,我认为它可以满足您的需求。

      在您的情况下,您将更改您的 .csproj 文件以引用 CLI 工具并省略 Version 元素:

      <Project Sdk="Microsoft.NET.Sdk">
        <PropertyGroup>
          <TargetFramework>netcoreapp1.1</TargetFramework>
          <GenerateAssemblyInfo>False</GenerateAssemblyInfo>
          <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
        </PropertyGroup>
        <ItemGroup>
          <Compile Include="..\..\GlobalAssemblyInfo.cs" Link="Properties\AssemblyInfo.cs" />
        </ItemGroup>
        <ItemGroup>
          <PackageReference Include="gitinfo" Version="1.1.66" />
        </ItemGroup>
        <ItemGroup>
          <DotNetCliToolReference Include="dotnet-setversion" Version="*" />
        </ItemGroup>
      </Project>
      

      要生成具有特定版本的 NuGet 包,您只需将 cd 放入项目目录并运行 dotnet restore &amp;&amp; dotnet setversion &lt;&lt;SOME_VERSION&gt;&gt;

      这会将Version 元素添加到.csproj 文件中,以便将来对dotnet builddotnet package 等的任何调用都将项目视为具有指定版本。这在 CI 构建期间特别有用,您可能希望在每次运行时自动增加版本号。

      为了全面披露,我不熟悉 GitInfo,因此如果这不适用于您的情况,我深表歉意。如果两者之间有任何相似之处,我个人会将此工具与GitVersion 结合使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-13
        • 2011-09-18
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多