Этот вопрос очень похож на https://stackoverflow.com/questions/36057041/setting-the-version-number-for-net-core-projects но не то же самое. Используя последнюю стабильную версию .Чистого ядра на момент написания статьи (1.1) и VS2017, .Чистая ядра перешел из JSON на основе файлов проекта для файлов csproj.
Так что я пытаюсь сделать, это создать в среде си, где я хотел бы быть в состоянии изменить что-то до сборки штамповать мои сборки с правильным номером версии.
Если я использую атрибуты такой старый (SharedAssemblyInfo.в CS трюк):
в
[assembly: AssemblyFileVersion("3.3.3.3")]
[assembly: AssemblyVersion("4.4.4.4")]
где-то в проекте, я получаю
CS0579 - дубликат 'системы.Отражение.AssemblyFileVersionAttribute'
и
CS0579 - дубликат 'системы.Отражение.AssemblyVersionAttribute'
ошибки при построении.
Когда порывшись в ней немного, я считаю, что есть файл, который выглядит как этот сгенерированный в процессе сборки (это вовсе'т существуют, прежде чем я создать) в папке\obj\отладки\netcoreapp1.1`:
в
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyDescriptionAttribute("Package Description")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.1.99.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.1.99")]
[assembly: System.Reflection.AssemblyProductAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyTitleAttribute("TestApplication")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.1.99.0")]
// Generated by the MSBuild WriteCodeFragment class.
Вопрос - как мне сделать этот бит? Так что я могу видеть, что это должно как-то быть сгенерирована из введенных значений в свойства проекта 'пакет страницы', но я не'т знаю, что правильно было бы поменять эти значения на мой осведомитель машина.
В идеале, я'd как, чтобы иметь возможность указать всю эту информацию в мою (Дженкинс) скрипт ки, но я'г довольствоваться только будучи в состоянии установить номер версии.
Редактировать - дополнительная информация Прочитав первый ответ, я хотел дать понять, что я создаю Как услуг, так и пакеты NuGet - и я бы предпочел иметь 1 способ управления версиями все, что бы как в старом формате JSON проект, где я могу просто обновить один файл.
Обновление Я со сценариями изменения в файле csproj что на мой взгляд довольно суховато как раздел мне нужно изменить выглядит так...
в
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<Version>1.0.7777.0</Version>
<AssemblyVersion>1.0.8888.0</AssemblyVersion>
<FileVersion>1.0.9999.0</FileVersion>
<Company>MyCompany</Company>
<Authors>AuthorName</Authors>
<Product>ProductName</Product>
<Description />
<Copyright>Copyright © 2017</Copyright>
</PropertyGroup>
Так проблема в том, что есть несколько 'свойств' элементы; другие появляются, чтобы быть помечены - но не зная, как csproj является вместе взятые, я могу'т сказать, что это всегда так.
Я работаю на предположении, что детали пакета будут всегда заполнены, в противном случае теги значением (выше) Дон'т появляются в XML - Итак, я могу использовать скрипт для обновления значений на месте. Если теги были не там, я бы не мысль, которая свойств элемента введите значения в поля (а также, в каком порядке, как это представляется важным; изменение порядка остановили меня от загрузки проекта в VS2017).
Я все еще протягивая для лучшего решения, чем этот!
Обновление: после того, как кто-то помечая этот вопрос как можно дублировать (https://stackoverflow.com/questions/43019832/auto-versioning-in-visual-studio-2017-net-core) - я бы'т видел этот вопрос раньше, и сейчас читаете это, кажется, почти тот же за исключением того, что я не просто хочу установить номер версии. Кроме того, ответы на этот вопрос не решают мои проблемы - только спрашивает, Что я просил на мой вопрос. Принято отвечать на мой вопрос точно ответить, мне нужно решить мои проблемы - так что пока пришел первый другой вопрос и появляется то же самое - это не поможет мне на всех. Может, мод может помочь?
Вы можете изменить любое свойство из командной строки, передав /п:Имясвойства=значение
в качестве аргументов dotnet ограничителя восстановить
, dotnet ограничителя строить " и " dotnet ограничителя пакет
.
В настоящее время в состав версии работает как это:
Если "версия" не установлено, используйте VersionPrefix
(по умолчанию 1.0.0 если отключено), а если нету - добавить VersionSuffix
.
Все остальные версии, потом дефолт, что "версия".
Так, например, вы можете установить <VersionPrefix>1.2.3</VersionPrefix>
в csproj файл и затем вызвать dotnet ограничителя пакет-версия-суффикс бета1
производить YourApp.1.2.3-бета1.nupkg все (если у вас есть ссылка на другой проект, что вы хотите, чтобы версия суффикс применяется также, вам нужно позвонить
dotnet ограничителя восстановление /п:VersionSuffix=бета1` до этого - это известная ошибка в штампе).
Конечно, вы также можете использовать пользовательские переменные, см. Этот вопрос на GitHub на нескольких примерах.
Полный перечень поддерживаемых атрибутов сборки, я предлагаю глядя на исходный код логики построения здесь (значения в окружении $()
используются свойства).
И так как я'м уже говорит об источнике, это логика, которая сочиняет версии и несколько других свойств.
dotnet build /p:AssemblyVersion=1.2.3.4
Это работа для вас?
Чтобы ответить на ваш вопрос прямо: новый SDK для MSBuild автоматически генерировать инфо-файл сборки. Вы можете подавить, что с помощью директив в MSBuild (ознакомиться с его образцом: вызвать dotnet ограничителя перенести на проект.проект, основанный на JSON).
Но позвольте мне сказать вам мое обращение: у меня было несколько проектов по обмену одной и той же версии. Я добавил версии.файл props, который содержит группу свойств, включая элемент с именем
VersionPrefix`. Этот файл я включил через файл csproj ("включить" заявление). Я также удалены все отличается.в CS файлов и пусть СДК генерировать их для меня.
Изменения в версии.файл props` при построении.
В моем случае, основной ключ /собственность:версии=1.2.3.4
. И в следующей командной строке выполнил свою работу:
dotnet build SolutionName.sln -c Release /property:Version=1.2.3.4
Это будет переопределить значение по умолчанию версия сборки.
Я использую Дженкинс + осьминог для сі, а после работал очень хорошо:
вручную
файл nuspec` с #2.В MSBuild 2017 будет генерировать некоторые сборки информация если вы не нашли их в файл проекта.
Если вы можете прочитать целевого файла MSBuild вы можете посмотреть на:
`[Против установить dir] \в MSBuild\пакеты SDK\Майкрософт.Чистая.\SDK построения\от Microsoft.Чистая.GenerateAssemblyInfo.целей
Вы увидите, вы можете использовать какое-то свойство в вас файл проекта, чтобы отключить сгенерированный ассемблерный информация для предотвращения дублирования с ваши средства.
<GenerateAssemblyInfo>
(это свойство будет включать/выключать все создать сборку инфо)<GenerateAssemblyCompanyAttribute>
<GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCopyrightAttribute>
<GenerateAssemblyDescriptionAttribute>
<GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyInformationalVersionattribute>
<GenerateAssemblyProductAttribute>
<GenerateAssemblyTitleAttribute>
<GenerateAssemblyVersionAttribute>
<GenerateNeutralResourcesLanguageattribute>
Как я'вэ ответил Здесь, я'ве сделали инструмент командной строки под названием dotnet ограничителя-setversion, который можно использовать для управления версиями *.csproj файл-стиле .Объем основных проектов.
Во время сборки CI, вы можете использовать GitVersion или другой инструмент, чтобы определить номер версии для вашего проекта и затем вызвать dotnet ограничителя-setversion $YOUR_VERSION_STRING
в корневом каталоге проекта.
Прохождение /п:Имясвойства=значение в качестве аргумента для меня не работает (ASP.Net ядра веб-приложения 2.0). Я нашел Манифест версиями задачи построить на marketpace: https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-Versioning-Task
То, что я делаю это .csproj файл
``в формате XML <проекта SDK="от компании Microsoft.Чистая.СДК.Веб" и> <свойств>
``
Указать подстановочный в AssemblyVersion и затем повернуть детерминированных флаг. Номера будут добавлены к wildecard.