使用 dotnet-outdated 维护项目 nuget 包版本

使用 dotnet-outdated 维护项目 nuget 包版本

Intro

我们项目中或多或少都会有一些 NuGet 包,使用到 NuGet 包时,如何保证我们的 NuGet 包不会太旧呢?我们可以借助 dotnet-outdated 来检查项目中的 NuGet 包是否有更新

Sample

首先我们需要执行 dotnet tool install --global dotnet-outdated-tool 命令安装 dotnet-outdated 工具,命令安装好之后就会执行 dotnet-outdated 就可以分析当前解决方案/项目下的 NuGet 依赖是否是最新的,如果不是最新的会打印当前版本的信息和最新版本的信息

e9e755ebdfd2ba0e0d8b12d8ec02daf7.png

这只会打印版本更新信息,并不会直接更新,如果要更新包版本,只需要添加一个 -u 的选项即可,直接 -u 会更新所有不是最新的 package

072ca0becdc6fe63730b9108c8d82968.png

CI Service

利用 dotnet-outdated 我们可以检测项目中引用的 NuGet 包是否有更新,也可以将其改造为一个 CI 服务,在 push 代码或者定期检查项目中引用的 NuGet 包是否有新版本,下面是我自定义的一个 Github Actions 示例:

name: dotnet-outdatedon:schedule:- cron:  '0 1 * * *'push:branches: - "master"
jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v1- name: Setup .NET 6uses: actions/setup-dotnet@v1with:dotnet-version: '6.0.x'include-prerelease: true- name: buildrun: dotnet build- name: install dotnet-outdatedrun: dotnet tool install --global dotnet-outdated-tool- name: Run dotnet-outdatedrun: dotnet-outdated -u- name: check for changesrun: |if git diff --exit-code; thenecho "has_changes=false" >> $GITHUB_ENVelseecho "has_changes=true" >> $GITHUB_ENVfi- name: Build againif: ${{ env.has_changes == 'true' }}run: dotnet build- name: Create Pull Requestif: ${{ env.has_changes == 'true' }}uses: peter-evans/create-pull-request@v3with:token: ${{ secrets.GITHUB_TOKEN }}commit-message: "Update NuGet Packages"title: 'Update NuGet Packages'body: >This PR updates the outdated NuGet packages.labels: automated prbranch: update-nuget-dependenciesbase: ${{ github.ref }}

基本执行过程是这样的,先 build 项目,然后安装 dotnet-outdated 工具并尝试更新项目中的 NuGet 包,然后通过 git diff 检测是否有文件变更,如果有变更则重新 build 项目看是否会失败,如果成功了,就提交变更并自动发起一个 PR

这种方式如果更新最新版本失败的话就会导致 CI 失败,如果不希望 CI 失败也可以改造更新版本后的 dotnet build,改造成下面的方式

- name: Build againif: ${{ env.has_changes == 'true' }}run: |if dotnet build; thenecho "has_breaking_changes=false" >> $GITHUB_ENVelseecho "has_breaking_changes=true" >> $GITHUB_ENVfi- name: Create Pull Requestif: ${{ env.has_breaking_changes == 'false' }}uses: peter-evans/create-pull-request@v3with:token: ${{ secrets.GITHUB_TOKEN }}commit-message: "Update NuGet Packages"title: 'Update NuGet Packages'body: >This PR updates the outdated NuGet packages.labels: automated prbranch: update-nuget-dependenciesbase: ${{ github.ref }}

这样 dotnet build 失败的话就不会直接导致 CI 失败,并且也不会自动创建 PR,但是这样的话可能就不知道有更新了,还是建议使用第一种方式,让 CI 失败及时更新并修复失败

More

dotnet-outdated 除了上面的简单用法之外,还有更多小技巧

比如我们可以使用 --version-lock 来只更新小版本,比如使用 --version-lock=Major 只更新 Minor 版本的更新,举个栗子,4.0.0 只会更新到 4.x.x  版本,不会更新到 5.x.x 版本

652ceddc0e657b82234eafd57b655319.png

另外可以指定 --pre-release 来指定使用预览版本的更新,默认会自动根据当前 NuGet 包的版本去决定是否使用预览版本,如果是预览版本是会使用预览版本,如果是稳定版则不会使用预览版,可以显式指定 -pre=Always/--pre-release=Always 来指定始终使用预览版本

我们也可以指定 -u:prompt 来一个一个提示更新

be75b3c86de38e94e4f27ba779eccba1.png

更多用法可以参考文档

References

  • https://github.com/dotnet-outdated/dotnet-outdated

  • https://github.com/OpenReservation/ReservationServer

  • https://github.com/OpenReservation/ReservationServer/blob/dev/.github/workflows/dotnet-outdated.yml

  • https://github.com/OpenReservation/ReservationServer/pull/56

  • https://github.com/WeihanLi/SparkTodo/blob/master/.github/workflows/dotnet-outdated.yml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

被一帮小姐姐围着是什么感觉?

1 阿姨:我靠灵魂呼吸...▼2 医学院护理班男生的日常▼3 嫌自己活太久了?▼4 看来还是作业太少了▼5 小孟老师,您妈!▼6 哈哈哈哈哈,不行了...▼7 他今天是不会跟你走的!!!▼8 …

仓库处理中 无法修改_上海电商仓储物流公司,冷链仓库-上海玖日仓储

首页 > 新闻列表 > 浏览文章发布时间:2020-10-21 15:03:33 浏览量: 4导读:上海玖日仓储为您提供上海电商仓储物流公司,冷链仓库的相关知识与详情: 货物出入库扫描功能,同时记录扫描时间;完善订单与仓…

13 个 C# 10 特性

常量的内插字符串C# 10 允许使用在常量字符串初始化中使用插值, 如下const string name "Oleg"; const string greeting $"Hello, {name}.";Console.WriteLine(greeting); // Output: Hello, Oleg.扩展属性模式从 C# 10 开始,您可以在适当的模…

android studio button位置_免费的Android开发环境

Android Studio for mac是一个全面的Android开发环境,Android Studio帮助您设计,构建,测试和调试Android应用程序,利用Android Studio所有特色工具并开发出令人惊叹的应用程序。Android Studio是一个为Android平台开发程序的集成开…

TCP握手/挥手的过程分析

TCP连接建立 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 服务器必须准备好接受外来的连接。这通过调用socket、 bind和listen函数来完成,称为被动打开(passive open)。 第一次握手:客户通过调用connec…

Android数据库Realm实践

Android开发中常用的数据库有5个: 1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连接,Spring以及Android平台。语法中广泛使用了注解(Annotation)。 2. SugarORM SugarORM 是 Android …

TCP协议中的三次握手和四次挥手(图解)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Serv…

java 矩阵题目_java练习本(原每日一练)(20190517)

名人名言昨日翻译“You will face many defeats in life, but never let yourself be defeated.”——Maya Angelou“你将在生活中面临许多失败,但决不让自己被打败。”——玛雅安吉罗今日名言“May you live all the days of your life.”——Jonathan Swift2019.0…

(转)直接拿来用!最火的iOS开源项目(一)

2019独角兽企业重金招聘Python工程师标准>>> 1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目。AFNetworking是一个轻量级的iOS、Mac OS X网络通信类库,现在是GitHub上第三大Objective-C库。它建立在N…

.NET+Sqlite如何支持加密

点击上方蓝字关注我们.NETSqlite如何支持加密SqliteSQLite 来源于公共领域 SQLite Is Public Domain、确保代码不会受到任何专有或许可内容的污染,没有任何来自互联网上的未知来源复制。即全是原创的。虽然是免费的,无需许可证,可用于任何目的…

linux之scp命令

svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 说明&#xff1a…

裸奔、抽烟、凡尔赛,原来数学家玩得这么野……

全世界只有3.14 % 的人关注了爆炸吧知识六个数学家一部数学史假如宇宙真的由神明设计那他一定是个数学家数学就是他描绘自然的语言数学的重要性已经不用多说但是很多人仍觉得数学是高冷的女神其实数学神奇却并不神秘高贵却并不高冷因为有一群智者早就用他们的智慧和精力将那些晦…

foreach循环符合就不往下走了_柴油发电机组冷却液循环故障解决方法

点击上方蓝字了解更多精彩柴油发电机组冷却液循环故障是发电机组的常见故障之一!下面给大家介绍一下针对循环故障做出的排查解决。1、柴油发电机组水泵故障。首先我们要先检查水泵作用是否良好,要是发现水泵传动齿轴磨损过限时,说明水泵已失去…

java web移植 遇到Project facet Java version 1.7 is not supported

2019独角兽企业重金招聘Python工程师标准>>> 在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持。说明项目是其他版本jdk编译的,在eclipse里运行时会报版本不支持。 解决办法: 法1&a…

c#winform自定义窗体(含源码)

第一步:首先引用DLL再窗体中继承DevComponents.DotNetBar.OfficeFormpublic partial class MainForm : DevComponents.DotNetBar.OfficeForm初始化程序中添加 this.EnableGlass false;public MainForm(){this.EnableGlass false;InitializeComponent();}第二步&a…

如何巧妙拒绝老同学借钱?哈哈哈哈哈......

1 别说,还挺像...cr:豆瓣银河系漫游1999▼2 奇奇怪怪的赚钱方式又增加了▼3 教你如何做到边吃边睡...▼4 方法二还挺有道理...▼5 总是在不该清醒的时候清醒▼6 多令人怀念!▼7 对不起,我太菜了▼8 哈哈哈哈哈▼8 数学能有…

协同过滤

在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简…

微信改成右滑删除_手机文件数据恢复,怎样恢复已过期的微信附件呢?

手机文件数据恢复,怎样恢复已过期的微信附件呢?我们在恢复手机删除的文件之前,很多人都想知道,为什么自己的文件删除了可以被恢复,既然能被恢复,是我彻底删除不了手机的文件吗?文件真的消失了吗…