dotnet 核心包版本控制
dotnet core package versioning
如何根据 Git 中的标记为 NuGet 包生成语义版本号(例如 MyCode.0.1.1.nupkg ) 使用 dotnet
CLI?
GitInfo 正确地对我们的程序集进行版本控制,但我想将其扩展到对我们的 NuGet 包进行版本控制。以下是我们的 .csproj 的片段:
<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
?
- 从
.csproj
中删除 <PackageVersion>
行。
- 在
Project
中添加 InitialTargets
语句:
<Project Sdk="Microsoft.NET.Sdk" InitialTargets="SetVersion">
- 为版本控制目标文件添加
Import
:
<Import Project="..\..\Version.targets" />
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>
我为 .NET Core 项目版本控制制作了一个 CLI 工具here,我认为它可以满足您的需求。
在您的情况下,您将更改 .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 && dotnet setversion <<SOME_VERSION>>
.
这会将 Version
元素添加到 .csproj
文件中,以便以后对 dotnet build
、dotnet package
等的任何调用都将把项目视为具有指定的版本。这在 CI 构建期间特别有用,您可能希望在每个 运行.
上自动增加版本号
为了全面披露,我不熟悉 GitInfo,所以如果这不适用于您的情况,我深表歉意。如果两者之间有任何相似之处,我个人会将此工具与 GitVersion 结合使用。
如何根据 Git 中的标记为 NuGet 包生成语义版本号(例如 MyCode.0.1.1.nupkg ) 使用 dotnet
CLI?
GitInfo 正确地对我们的程序集进行版本控制,但我想将其扩展到对我们的 NuGet 包进行版本控制。以下是我们的 .csproj 的片段:
<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
?
- 从
.csproj
中删除<PackageVersion>
行。 - 在
Project
中添加InitialTargets
语句:
<Project Sdk="Microsoft.NET.Sdk" InitialTargets="SetVersion">
- 为版本控制目标文件添加
Import
:
<Import Project="..\..\Version.targets" />
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>
我为 .NET Core 项目版本控制制作了一个 CLI 工具here,我认为它可以满足您的需求。
在您的情况下,您将更改 .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 && dotnet setversion <<SOME_VERSION>>
.
这会将 Version
元素添加到 .csproj
文件中,以便以后对 dotnet build
、dotnet package
等的任何调用都将把项目视为具有指定的版本。这在 CI 构建期间特别有用,您可能希望在每个 运行.
为了全面披露,我不熟悉 GitInfo,所以如果这不适用于您的情况,我深表歉意。如果两者之间有任何相似之处,我个人会将此工具与 GitVersion 结合使用。