Этот вопрос очень похож на Установка номера версии для проектов .NET Core, но не то же самое. Используя последнюю стабильную версию .NET Core на момент написания (1.1) и VS2017,.NET Core переключился с файлов проектов на основе JSON на файлы CSPROJ.
Итак - то, что я пытаюсь сделать, это настроить среду CI, где я хотел бы иметь возможность модифицировать что-то до сборки, чтобы штамповать мои сборки с правильным номером версии.
Если я использую такие атрибуты, как старый (SharedAssemblyInfo.cs трюк):
[assembly: AssemblyFileVersion("3.3.3.3")]
[assembly: AssemblyVersion("4.4.4.4")]
где-то в проекте, я получаю
CS0579 - Duplicate 'System.Reflection.AssemblyFileVersionAttribute'
и CS0579 - Duplicate 'System.Reflection.AssemblyVersionAttribute'
ошибки при создании.
Когда вы немного разбираетесь в этом, я обнаружил, что есть файл, который выглядит так, как это было создано во время процесса сборки (он не существует до того, как я построил) в \obj\Debug\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.
Вопрос - как это сделать?
Поэтому я вижу, что это должно каким-то образом генерироваться из значений, введенных на странице пакета свойств проекта, но я не знаю, каким правильным способом было бы изменить эти значения на моей машине CI.
В идеале я хотел бы указать всю эту информацию в моем (Jenkins) CI script, но я бы согласился просто установить номер версии.
EDIT - дополнительная информация
Прочитав первый ответ, я хотел дать понять, что я создаю как службы, так и пакеты NuGET - и я предпочел бы иметь один способ управления версиями, что было бы похоже на старый проект JSON, где я мог бы просто обновить один файл,
UPDATE Я собираюсь с помощью скрипта изменить файл 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>
Итак, проблема заключается в том, что существует несколько элементов PropertyGroup; другие, похоже, помечены, но, не зная, как CSPROJ объединяется, я не могу сказать, что это всегда будет так.
Я работаю над тем, что детали пакета всегда будут заполняться, в противном случае теги значений (выше) не отображаются в XML файле, поэтому я могу использовать script для обновления значений. Если тегов значений не было, я бы не имел четкого представления о том, какой элемент PropertyGroup вставляет значения в (а также какой порядок, поскольку это кажется важным, изменение порядка остановило меня от загрузки проекта в VS2017).
Я все еще держусь за лучшее решение, чем это!
Обновление: после того, как кто-то отметит этот вопрос как возможный дубликат (Автоматическое ведение версий в Visual Studio 2017 (.NET Core)) - Я не видел этого вопроса раньше и теперь чтение кажется почти таким же, за исключением того, что я просто не хочу устанавливать номер версии. Кроме того, ответы на этот вопрос не решают мою проблему - только спрашивают, что я спросил по моему вопросу. Принятый ответ на мой вопрос - это именно тот ответ, который мне нужен, чтобы решить мою проблему - так что, когда другой вопрос пришел первым и появляется то же самое - мне это совсем не помогает. Может быть, мод может помочь?