NuGet是.NET生态系统的包管理器,用于在项目中共享和重用代码。版本控制是NuGet包管理的重要组成部分,它确保依赖关系的正确解析和更新。
NuGet遵循语义化版本控制(SemVer)规范,版本号格式为:Major.Minor.Patch[-Prerelease][+BuildMetadata]
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Version>1.0.0</Version> <!-- 完整版本 -->
<AssemblyVersion>1.0.0.0</AssemblyVersion> <!-- Assembly版本 -->
<FileVersion>1.0.0.0</FileVersion> <!-- 文件版本 -->
<PackageVersion>1.0.0</PackageVersion> <!-- NuGet包版本 -->
</PropertyGroup>
</Project>
dotnet pack --configuration Release
直接在项目文件中指定版本号,适合小型项目或需要精确控制的场景。
使用MSBuild或CI/CD工具自动生成版本号:
<PropertyGroup>
<VersionPrefix>1.0.0</VersionPrefix>
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
</PropertyGroup>
在CI/CD中可以通过参数传递VersionSuffix
。
使用GitVersion根据Git历史自动生成语义化版本:
<ItemGroup>
<PackageReference Include="GitVersion.MsBuild" Version="*" PrivateAssets="All" />
</ItemGroup>
现象: 项目引用了同一个包的不同版本,导致冲突。
解决方案:
<PackageReference>
统一版本bindingRedirect
(仅适用于.NET Framework)<DependencyVersion>ignore</DependencyVersion>
忽略警告(不推荐)现象: 修改了版本号但打包后版本未变化。
解决方案:
dotnet clean
obj
和bin
文件夹现象: 预发布版本被当作稳定版本使用。
解决方案:
1.0.0-alpha
--version-suffix
参数:dotnet pack --configuration Release --version-suffix "alpha"
[1.0,2.0)
)<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<!-- 基础版本 -->
<VersionPrefix>1.0.0</VersionPrefix>
<!-- CI中通过环境变量设置 -->
<VersionSuffix>$(BuildNumber)</VersionSuffix>
<!-- 如果是发布分支,则不使用后缀 -->
<Version Condition="'$(IsReleaseBranch)' == 'true'">$(VersionPrefix)</Version>
<Version Condition="'$(IsReleaseBranch)' != 'true'">$(VersionPrefix)-$(VersionSuffix)</Version>
</PropertyGroup>
</Project>
通过以上方法,你可以有效地管理和控制NuGet包的版本,确保依赖关系的稳定性和可维护性。
没有搜到相关的沙龙