我有一个解决方案,其中包含多个netstandard2.0项目,每个项目都构建自己的Nuget软件包:
+ MySln.sln
--+ MySln.ProjectOne
--+ MySln.ProjectTwo
--+ MySln.ProjectThree
我的CI脚本可以解决该问题,基本上就是这样:
dotnet restore MySln.sln
dotnet pack /p:PackageVersion=$(buildVersion) MySln.sln
--configuration release -o $(artifactDirectory)
这将创建三个Nuget包,每个ProjectOne,ProjectTwo和ProjectThree一个。
问题在于CI会在任何提交时触发,因此即使我只是例如对ProjectTwo或与任何项目无关的内容进行更改,我也会构建所有三个。
我现在想知道最好的方法(即:最简单的维护,尤其是在添加新的Projects时)将是仅发布实际源发生更改的Nuget软件包。我不能只是做一个二进制差异,因为每个编译器的编译程序集都会由于编译器时间戳的不同而不同,而版本号也会因为构建服务器而每次都不同。
我可以考虑做一些事情,以对软件包的所有源进行指纹识别(其中不仅仅包括.cs文件,例如嵌入式资源,许可证文件等),但是在构建自己的软件包之前,我想知道是否已经有某种通用的解决方案了;我认为其他项目也遇到了这个问题。
*或更明智的话,对每个项目执行git log -n 1 --pretty=format:%H -- MySln.ProjectOne
。