Как мне автоматически увеличить номер версии версии пакета при использовании файла проекта формата .Net Core в VS2019

Предыдущие ответы на этот вопрос относились к редактированию файла AssembyInfo.cs для установки версии сборки. Я создаю пакет NuGet, используя новый более компактный формат .Net Core файла .csproj для .Net Framework 4.6.1, и нет AssemblyInfo.cs (или он автоматически создается и удаляется).

Если я попытаюсь установить для свойства версии пакета значение 1.0.2. * В свойствах проекта в VS2019, я получаю всплывающее сообщение об ошибке:

В этом поле нельзя использовать подстановочный знак (*)

Если возможно, как я могу получить номер версии для автоматического увеличения, в идеале, чтобы в каждой сборке номер увеличивался (1.0.2.45 => 1.0.2.46), а номер сохранялся для всех выпусков (1.0.2.46 => 1.0.3.47 , вручную редактируя номер сборки / выпуска).

Примечание. Я уже смотрел ответ здесь, здесь и здесь, и все они относятся к атрибуту AssemblyVersion. Я хочу обновить версию пакета (это просто версия в файле CSProj).


Обновление: один из ответов предлагал несколько инструментов версий GIT. Я забыл упомянуть, что TFS используется во многих проектах, в которых я хочу его использовать; это рабочие проекты, совместно используемые с другими членами команды, и они хорошо зарекомендовали себя, поэтому их нелегко перенести на GIT без долгого обсуждения, даже если они не получили простого вето со стороны руководства как ненужное изменение.


person StarNamer    schedule 05.04.2019    source источник
comment
Есть тег VS 2019;)   -  person phuzi    schedule 05.04.2019
comment
Вы это видели? stackoverflow.com/ questions / 43019832 / Я думаю, это тот же вопрос, но прошу подтвердить   -  person DenverDev    schedule 05.04.2019


Ответы (2)


Во-первых, о подстановочных знаках в версиях сборки и пакета:

Не рекомендуется использовать подстановочный знак для версий сборки (не пакета) - новый стандарт по умолчанию для проектов в стиле sdk использует функцию компилятора, называемую «детерминированная сборка», которая направлена ​​на создание двоичного идентичного вывода каждый раз, когда один и тот же неизмененный исходный код составлен. Этот режим не позволяет использовать подстановочные знаки в версиях сборки, которые меняются каждые 2 секунды.

Однако эту функцию можно отключить, установив

<PropertyGroup>
    <Deterministic>False</Deterministic>
</PropertyGroup>

Если вы затем используете подстановочный знак в своей версии сборки, компилятор обновит вашу версию на основе текущего времени.

Чтобы повторно использовать эту версию сборки для версии пакета, вам необходимо добавить дополнительную логику сборки в файл проекта, как описано здесь: MSBuild / t: pack Nuget-Package всегда имеет одну и ту же версию

Что я рекомендую делать:

Многие проекты используют свою историю git для управления версиями, увеличивая версию на основе счетчика коммитов git.

Я предлагаю изучить такие инструменты, как Nerdbank.GitVersioning (легкий и простой в использовании) или GitVersion (больше функций и лучшая документация), которые позволяют вам настроить, как ваши версии могут быть автоматически получены из ветки / теги, которые строятся.

person Martin Ullrich    schedule 05.04.2019
comment
Я вспомнил о детерминированной конструкции и понял ее причину. Но я удивлен, что никто не столкнулся с необходимостью автоматически увеличивать версию при изменении . На данный момент, чтобы протестировать изменение в пакете, я должен внести это изменение, а затем обновить номера версий сборки и пакета, чтобы гарантировать, что он будет восприниматься как новая версия, даже если он находится в локальном репозитории. Я бы не подумал, что я первый, кому понадобится расширение VS для автоматизации этого. Инструменты версии Git, вероятно, для меня не так полезны, поскольку я использую TFS. - person StarNamer; 07.04.2019
comment
То же самое можно сделать с числами изменения TFVC, но вручную ... Но инструментов не так много, поскольку TFS поддерживает Git, и для него есть задачи сборки, которые, например, анализируют GitVersion. Вы также можете использовать определение сборки для увеличения версии, которая где-то хранится. - person Martin Ullrich; 07.04.2019
comment
Спасибо, мы переходим на Git для новых проектов, но я надеялся, что кто-то уже собрал что-то для TFS, чтобы избавить меня от необходимости это делать! - person StarNamer; 08.04.2019

Нет поддержки автоматического увеличения для версий пакетов nuget. Вам нужно выяснить / установить номер версии вручную (или программно) с помощью чего-то вроде msbuild, платформы непрерывной интеграции или стороннего инструмента.

person mariocatch    schedule 05.04.2019