.net core 实现私有nuget包自动发布更新。

1 篇文章 0 订阅
1 篇文章 0 订阅

我这里介绍两种模式,单个nuget包的发布和批量nuget包的发布;

  • 先说单个包,先看例图:

在这里插入图片描述

解释下红框中标注的代码什么意思:

		<isPackable>true</isPackable> // 生成包
		<GeneratePackageOnBuild>true</GeneratePackageOnBuild> // 生成时是否自动生成包
		<IncludeSymbols>true</IncludeSymbols>
		<SymbolPackageFormat>snupkg</SymbolPackageFormat> // 类型
		<RunPostBuildEvent>false</RunPostBuildEvent> // 关闭自动更新功能 这个属性是自定义的,用于下面是否需要自动发布使用,后面会详细说明
		<Version>1.0.2.4</Version> // 包版本号

<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(RunPostBuildEvent)' == 'true'">
	<Exec Command="dotnet pack --configuration $(Configuration)&#xD;&#xA;dotnet nuget push -s 私有nuget服务地址 -k 密码 bin\$(Configuration)\$(ProjectName).$(Version).nupkg" />
</Target>

用了.net的发布后事件,既PostBuildEvent方法,里面执行把包发布到对应私有nuget的打包命令。
Condition="‘$(RunPostBuildEvent)’ == ‘true’"这段命令既代表我们上面自定义的属性条件,为true就代表需要生成时自动发布,为false就代表生成时不会执行这段命令。

注意:这就代表我们每次自动生成后发布成功后,需要手动将这个属性改为false,不然你每次生成时都会进行包更新。

好了,单个包发布就完成了,每次改了代码需要发布这个包时,只需要我们将版本号改一下(加1),然后把RunPostBuildEvent属性改成true,然后重新生成(编译),就可完成发布了。
(再次提醒,发完后,将这个属性改为false,不然你每次编译都会失败,如果你没改版本号的情况下)

如下图,发布后的效果
在这里插入图片描述

以上就是单个包的发布了,是不是很简单,现在我们来看批量发包的操作,其实原理是一样的;

  • 批量包发布:

一样的,在我们每个要发布的包里面都写上我上面提到的命令代码,然后创建两个Ps1类型的文件,这里执行的是PowerShell脚本文件的方式,
在这里插入图片描述

UpdateVersion.Ps1的代码如下:

$folderPath = Join-Path -Path $PSScriptRoot -ChildPath "src"  # 替换为包含类库项目的文件夹路径

$projects = Get-ChildItem -Path $folderPath -Filter *.csproj -Recurse

foreach ($project in $projects) {
    $projectFilePath = $project.FullName

    # 读取项目文件
    $projectXml = [xml](Get-Content -Path $projectFilePath)

    # 获取当前版本号
    $currentVersion = $projectXml.Project.PropertyGroup.Version

    # 解析版本号成主版本、次版本、修订号和生成号
    $versionParts = $currentVersion -split '\.'
    $major = [int]$versionParts[0]
    $minor = [int]$versionParts[1]
    $revision = [int]$versionParts[2]
    $build = [int]$versionParts[3]

    # 递增修订号
    $build++

    # 更新版本号
    $newVersion = "$major.$minor.$revision.$build"
    $projectXml.Project.PropertyGroup.Version = $newVersion

    # 更新 RunPostBuildEvent 字段为 true
    $projectXml.Project.PropertyGroup.RunPostBuildEvent = "true"

    # 保存更新后的项目文件
    $projectXml.Save($projectFilePath)
}

可以看出来其实这个文件的作用就是批量修改src文件夹下面所有包项目文件,将他们的RunPostBuildEvent 属性改为true,同时Version属性版本加1;

CloseBuildEvent.Ps1文件代码如下:

$folderPath = Join-Path -Path $PSScriptRoot -ChildPath "src"  # 替换为包含类库项目的文件夹路径

$projects = Get-ChildItem -Path $folderPath -Filter *.csproj -Recurse

foreach ($project in $projects) {
    $projectFilePath = $project.FullName

    # 读取项目文件
    $projectXml = [xml](Get-Content -Path $projectFilePath)

    # 更新 RunPostBuildEvent 字段为 false
    $projectXml.Project.PropertyGroup.RunPostBuildEvent = "false"

    # 保存更新后的项目文件
    $projectXml.Save($projectFilePath)
}

这个文件也很明显就是将所有项目文件对应的RunPostBuildEvent 属性改为false;

然后就没了。

执行步骤就是:

  1. 执行 UpdateVersion.Ps1
  2. 重新生成所有项目文件
  3. 执行CloseBuildEvent.Ps1

以上就完成了所有的项目文件打包更新,这种方式比较新奇哈(可能我在网上没看到有用这种方式完成打包更新的),但是我觉得是真的挺方便的,自己能随意控制需不需要发布更新。

题外:在这里说一下很多电脑执行Ps1
类型文件遇到的问题,由于window系统的电脑大部分是不允许手动执行Ps1类型的文件的,(可自己执行试一下)
所以需要我们手动修改一些系统策略,如下步骤:

修改执行策略: 在 PowerShell 终端中以管理员身份运行以下命令,将执行策略更改为
“RemoteSigned”,允许运行本地未签名的脚本:

  1. Set-ExecutionPolicy RemoteSigned
  2. 如果系统提示确认更改,请输入 “Y” 并按下 Enter。

注意:更改执行策略可能会对系统安全性产生影响,故并确保只允许可信的脚本运行。

仅允许运行当前脚本: 在 PowerShell 终端中以管理员身份运行以下命令,允许当前脚本运行,而不改变全局执行策略:

  • Unblock-File -Path “D:\Work\Code\framework\UpdateVersion.Ps1”

将路径 “D:\Work\Code\framework\UpdateVersion.Ps1” 替换为您实际的脚本文件路径。

这将解除对指定脚本文件的锁定,并允许运行该脚本。

总结:有问题可发评论,看到会解决问题,禁止抄袭,转载必须标注原文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值