Автоматически изменять версию только сборки, которая имеет изменения кода в Dot Net - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю патч для своего приложения, чтобы развернуть небольшие изменения на клиенте. В моем приложении у меня есть 100 .CSProject. Из 100 библиотек я внес изменения в код библиотеки классов A, B, C, а библиотека D вызывает библиотеку A, B и C. Так есть ли способ, когда я создаю свое приложение, то оно должно изменить версию только библиотеки A, B, C и D, которые имеют изменения. Вручную я могу измениться, но мне нужен любой способ c.

1 Ответ

0 голосов
/ 01 мая 2020

Так есть ли способ, когда я создаю свое приложение, тогда оно должно изменить версию только библиотеки A, B, C и D, которые имеют изменения. Вручную я могу изменить, но мне нужен любой автоматический c способ.

На самом деле, файл Directory Build.targets, вероятно, может реализовать это. Когда вы создаете файл с именем Directory.Build.targets, он может искать и воздействовать на все проекты в текущей папке и подчиненных. См. этот документ о его области поиска. Directory Build.targets очень похоже на Directory Build.props. И Directory Build.targets выполняется после сборки, в то время как Directory Build.props выполняется до начала сборки.

В вашей ситуации , вы хотите перезаписать свойство Версия , вы должны использовать Directory Build.targets.

Тогда , когда Вы строите проект, он автоматически помещает контент в сферу проекта.

Решение

1) Создайте файл с именем Directory Build.targets file под вашим решением или каталог верхнего уровня из 100 проектов.

2) добавьте их в Directory Build.targets файл:

<Target Name="change_property" AfterTargets="CoreCompile">
<PropertyGroup>
<Version>xxxxx</Version>
</PropertyGroup>
</Target>

3) Затем вы можете установить версию всех измененных проектов на ту же версию, что и вы ш sh.

И эта функция делает одинаковые изменения свойств для всех измененных проектов.

Вы должны заметить, что у нее есть недостаток

Но вы не должны изменение других связанных проектов (изменение кода или добавление нового элемента, изображения или чего-либо еще). При изменении несвязанных проектов эта функция также изменяет версию несвязанных проектов. Это особенность CoreCompile target.

Предложение

Поэтому , вам следует обратить внимание, чтобы не изменять другие проекты или вы можете использовать Alt + A, чтобы выбрать все проекты -> выгрузить проект, а затем перезагрузить необходимые проекты и изменить их в случае изменения любых других не связанных проектов.

или попытаться поставить эти необходимые проекты в новую папку с именем Modified Projects в папке решения (которая существует xxx.sln file) и затем поместите Directory Build.targets в папку Modified Projects.

--------- -------- Используйте другие методы, подобные этой, чтобы избежать этой ситуации.

Обновление 1

1) Если ваши проекты в той же папке решения вы можете создать файл с именем Directory.Build.targets.

enter image description here

Он будет работать со всеми элементами в текущей папке и ее вторичный каталог.

И добавьте мой пример кода в этот файл:

<Project>
<Target Name="change_property" AfterTargets="CoreCompile">
    <PropertyGroup>
    <Version>xxxxx</Version>
    </PropertyGroup>
    </Target>
</Project>

И тогда вы можете изменить свой проект nuget cts, когда вы заканчиваете связанные проекты, вы можете создать свое решение или использовать MSBuild.exe до build xxx.sln, и этот файл будет выполнен автоматически и изменит версию измененных проектов nuget.

Надеюсь, что это может помочь Вас и любой другой отзыв ожидают.

Обновление 2

Пожалуйста, попробуйте изменить для использования в Directory.Build.targets, и оно будет работать в рамках всего решения, чтобы применить к каждый verison номер.

 <Project>
    <Target Name="change_property" AfterTargets="CoreCompile">
        <PropertyGroup>
        <Version>xxxxx</Version>
        </PropertyGroup>
        </Target>
    </Project>
<PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    </PropertyGroup>

и убедитесь, что <GeneratePackageOnBuild>true</GeneratePackageOnBuild> в Directory.Build.targets. В противном случае это не удастся. Поэтому, пожалуйста, удалите этот узел в xxx.csorj файле и добавьте <GeneratePackageOnBuild>true</GeneratePackageOnBuild> в Directory.Build.targets.

...