У меня есть решение с несколькими проектами 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 или что-то, не связанное ни с одним из проектов.
Теперь мне интересно, что лучший (а именно: самый простой в обслуживании, особенно при добавлении новых проектов) подход - это публиковать только пакеты Nuget, в которых фактические источники изменились. Я не могу просто сделать бинарный diff, потому что скомпилированные сборки отличаются на каждой компиляции из-за метки времени компилятора, и номер версии также отличается каждый раз из-за сервера сборки.
Я могу подумать о том, чтобы сделать что-то, где я снимаю отпечатки пальцев со всех источников пакета * (который включает в себя не только файл .cs, например, встроенные ресурсы, файл лицензии и т. Д.), Но прежде чем я соберу свой собственный, Интересно, есть ли какое-то общее решение для этого уже; Я предполагаю, что другие проекты столкнулись с этим.
* Или более разумно, сделайте git log -n 1 --pretty=format:%H -- MySln.ProjectOne
для каждого проекта.