在 VS2019 中使用 .Net Core 格式的项目文件时如何自动增加包版本修订号
Posted
技术标签:
【中文标题】在 VS2019 中使用 .Net Core 格式的项目文件时如何自动增加包版本修订号【英文标题】:How do I autoincrement the Package Version revision number when using a .Net Core format project file in VS2019 【发布时间】:2019-08-27 11:49:26 【问题描述】:此问题的先前答案是指编辑 AssembyInfo.cs 文件以设置程序集版本。我正在使用 .Net Framework 4.6.1 的 .csproj 文件的新精简 .Net Core 格式生成 NuGet 包,并且没有 AssemblyInfo.cs(或者它是自动生成和删除的)。
如果我尝试在 VS2019 的项目属性中将 Package Version 属性设置为 1.0.2.*,则会出现弹出错误:
如果可能,我怎样才能让修订号自动递增,理想情况下,每次构建时,编号都会递增(1.0.2.45 => 1.0.2.46),并且该编号会在各个版本之间保留(1.0.2.46 => 1.0.3.47,手动编辑版本号)。
注意:我已经看过答案 here、here 和 here,它们都引用了 AssemblyVersion 属性。我想更新包版本(就是 CSProj 文件中的版本)。
更新:其中一个答案建议使用几个 GIT 版本工具。我忘了提到 TFS 用于很多我想使用它的项目;这些是与其他团队成员共享的工作项目,并且已经建立良好,因此即使没有得到管理层的简单否决,也不能在没有大量讨论的情况下轻易迁移到 GIT。
【问题讨论】:
有一个 VS 2019 标签 ;) 你看到这个了吗? ***.com/questions/43019832/…我认为是同一个问题,但请确认 【参考方案1】:首先,关于程序集和包版本中的通配符:
不鼓励使用汇编(不是包)版本的通配符 - “sdk 风格”项目的新默认值使用称为“确定性构建”的编译器功能,旨在每次生成相同的二进制输出编译未更改的源代码。此模式不允许在程序集版本中使用通配符,该通配符每 2 秒更改一次。
不过这个功能可以通过设置关闭
<PropertyGroup>
<Deterministic>False</Deterministic>
</PropertyGroup>
如果您随后在程序集版本中使用通配符,编译器将根据当前时间更新您的版本。
要将此程序集版本重新用于包版本,您需要在项目文件中添加一些额外的构建逻辑,如下所述:MSBuild /t:pack Nuget-Package has always the same Version
我鼓励做的事情:
许多项目使用他们的 git 历史记录进行版本控制,根据 git 提交计数递增版本。
我建议研究Nerdbank.GitVersioning(轻量级且易于使用)或GitVersion(更多功能和更好的文档)之类的工具,它们允许您配置如何从正在创建的分支/标签自动派生版本建成。
【讨论】:
我读到了“确定性构建”并理解了它的原因。但令我惊讶的是,没有人遇到过在进行更改 时自动增加版本的需要。目前,要测试包中的更改,我必须进行更改,然后更新程序集和包版本号,以确保即使它位于本地存储库中,它也会被视为新版本。我不会想到我是第一个想要一个 VS 扩展来自动化这个的人。 Git 版本工具可能对我没那么有用,因为我使用的是 TFS。 类似的事情可以通过 TFVC 更改编号但手动完成。但是由于 TFS 支持 Git 并且有一些构建任务可以解析 GitVersion,所以工具并不多。您还可以使用构建定义来增加存储在某处的版本。 谢谢,我们正在迁移到 Git 进行新项目,但我希望有人已经为 TFS 整合了一些东西,以节省我的工作时间! @StarNamer 看到这个了吗? github.com/devlooped/GitInfo【参考方案2】:没有对版本控制 nuget 包的自动增量支持。您需要通过 msbuild、持续集成平台或第三方工具等手动(或以编程方式)计算/设置版本号。
【讨论】:
以上是关于在 VS2019 中使用 .Net Core 格式的项目文件时如何自动增加包版本修订号的主要内容,如果未能解决你的问题,请参考以下文章
在VS2019 / .Net Core 3.1中使用“生产单个文件”发布选项时,是否可以保持appsettings.json可编辑的后期部署?
vs2019 wpf .net core都有哪些没包含.net