前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Roslyn 打包 NuGet 包添加改动日志

Roslyn 打包 NuGet 包添加改动日志

作者头像
林德熙
发布2020-07-29 15:01:18
9060
发布2020-07-29 15:01:18
举报

默认的 NuGet 包支持在 releaseNotes 中添加更改日志,用户可以通过更改日志了解各个版本更新的内容。在 SDK Style 格式的 csproj 文件,可以读取本地的文本文件的内容作为 NuGet 包的改动日志

在我的团队的 CBB 基础库项目的文件规范,要求每个项目都会包含 README.md 和 CHANGELOG.md 文件,其中的 CHANGELOG.md 文件就是记录 API 变更等的改动记录文件

在更改日志写的比较好的项目是 Office 团队的 Open-XML-SDK 项目的 CHANGELOG.md 文件 这个文件记录了每次 PR 包含的更改

在 SDK Style 里面让打包的 NuGet 添加改动日志的方法是设置 PackageReleaseNotes 属性的值,如下面代码

  <PropertyGroup>
    <PackageReleaseNotes># 1.0

  测试</PackageReleaseNotes>
  </PropertyGroup>

而在项目就包含了 CHANGELOG.md 文件

那么是否可以在 SDK Style 格式的项目文件里面读取项目的 CHANGELOG.md 或 RELEASE-NOTES.txt 的内容,作为 NuGet 包的 ReleaseNotes 内容?可以通过下面几个方法

  <PropertyGroup>
    <ChangeLogFile>$(MSBuildProjectDirectory)\CHANGELOG.md</ChangeLogFile>
    <PackageReleaseNotes>$([System.IO.File]::ReadAllText($(ChangeLogFile)))</PackageReleaseNotes>
  </PropertyGroup>

上面这个方法将会使用读取文件的方式,将 ChangeLogFile 的内容读取,然后将文本作为 PackageReleaseNotes 属性的内容。这里需要注意 ChangeLogFile 文件需要使用 Utf-8 编码

上面代码的 (MSBuildProjectDirectory) 表示的是 csproj 项目文件所在的文件夹的路径,如果是期望获取当前的文件的文件夹,可以使用 (MSBuildThisFileDirectory) 获取当前文件所在的文件夹。上面代码如果写在 csproj 文件,那么 (MSBuildThisFileDirectory) 和 (MSBuildProjectDirectory) 是相同的

另一个方法不是很靠谱,是通过 Target 读取文件的方式,这个方法不靠谱原因是 GenerateNuspec 不一定触发

<Target Name="PreparePackageReleaseNotesFromFile" BeforeTargets="GenerateNuspec">
  <ReadLinesFromFile File="../RELEASE-NOTES.txt" >
    <Output TaskParameter="Lines" ItemName="ReleaseNoteLines"/>
  </ReadLinesFromFile>
  <PropertyGroup>
    <PackageReleaseNotes>@(ReleaseNoteLines, '%0a')</PackageReleaseNotes>
  </PropertyGroup>
</Target>

上面代码读取 RELEASE-NOTES.txt 文件作为变更日志的内容

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档