Можете ли вы поделиться информацией о версии между библиотеками .NET Standard? - PullRequest
0 голосов
/ 31 августа 2018

В типичном приложении .NET информация о продукте и версии хранится в файле AssemblyInfo.cs в папке «Свойства», например ...

DLL Project
 - Properties Folder
    - AssemblyInfo.cs

В нашем случае у нас есть решение, в котором нам нужно синхронизировать информацию о версии между одиннадцатью DLL.

Для этого мы сначала удалили все общие значения из файла AssemblyInfo.cs каждого проекта, оставив только те значения, которые относятся к этому конкретному проекту.

Затем мы поместили все общие значения во второй файл с именем AssemblyInfo_Shared.cs, который мы сохраним в одной папке с файлами проектов. Затем мы добавляем этот файл в папку «Свойства» каждого проекта по ссылке (это маленькая стрелка «вниз» на кнопке при добавлении.)

При этом все связанные библиотеки DLL совместно используют одну и ту же информацию о версии, сохраняя при этом также свойства, относящиеся к сборке. Это позволяет поддерживать синхронизацию набора версионных DLL-файлов, поскольку мы редактируем один файл, и все одиннадцать версий DLL обновляются одновременно.

Вот как это выглядит ...

Common Folder
  - AssemblyInfo_Shared.cs (Actual)

DLL Project A
 - Properties Folder
    - AssemblyInfo.cs // Only values specific to A
    - AssemblyInfo_Shared.cs (Link)

DLL Project B
 - Properties Folder
    - AssemblyInfo.cs // Only values specific to B
    - AssemblyInfo_Shared.cs (Link)

Содержимое AssemblyInfo.cs в Project A выглядит следующим образом ...

using System.Reflection;

[assembly: AssemblyTitle("SomeApp.LibA")]
[assembly: AssemblyDescription("This is the code for  A")]

Это проект B's

using System.Reflection;

[assembly: AssemblyTitle("SomeApp.LibB")]
[assembly: AssemblyDescription("This is the code for Project B")]

А вот и общий ...

using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;

[assembly: AssemblyProduct("SomeApp")]
[assembly: AssemblyVersion("1.4.3.0")]
[assembly: AssemblyFileVersion("1.4.3.0")]
[assembly: AssemblyCompany("MyCo")]
[assembly: AssemblyCopyright("Copyright (c) 2010-2018, MyCo")]
[assembly: ComVisible(false)]
[assembly: NeutralResourcesLanguage("en-US")]

[assembly: CLSCompliant(true)]

С учетом вышеизложенного обе библиотеки DLL совместно используют одну и ту же информацию о версии, поскольку при сборке общий файл «объединяется» с файлом конкретного проекта. Надеюсь, это имеет смысл.

Однако в проектах .NET Standard информация о версии запекается прямо в файле Project в разделе <PropertyGroup>, поэтому я не уверен, как мы можем достичь такой же возможности.

Есть ли в .NET Standard что-либо, поддерживающее это?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Решение сэра Руфо прекрасно, но есть другой способ, который стал возможен благодаря новому формату проекта. Это позволяет настроить автоматическую генерацию сборки.

Вы можете поместить файл Directory.Build.props в родительский каталог ваших проектов, и он будет автоматически включен. См. документацию :

Однако теперь вы можете добавить новое свойство в каждый проект за один шаг, определив его в одном файле с именем Directory.Build.props в корневой папке, содержащей ваш исходный код. При запуске MSBuild Microsoft.Common.props ищет в вашей структуре каталогов файл Directory.Build.props Microsoft.Common.targets ищет Directory.Build.targets ). Если он находит, он импортирует свойство. Directory.Build.props - это пользовательский файл, который предоставляет настройки для проектов в каталоге.

Таким образом, вы можете использовать это, чтобы добавить информацию о сборке:

<?xml version="1.0" encoding="utf-8"?>
<Project>
  <PropertyGroup>
    <Version>1.4.3.0</Version>
    <Product>SomeApp</Product>
    <Company>MyCo</Company>
    <Copyright>Copyright (c) 2010-2018, MyCo</Copyright>
  </PropertyGroup>
</Project>

Вероятно, нет тега для атрибута CLSCompliant, но у вас будет все необходимое для информации о сборке и некоторых других вещей. Здесь - документы для свойств, связанных с NuGet, но, к сожалению, сейчас единственной «документацией» для свойств информации о сборке является исходный код здесь (до этой проблемы решено, по крайней мере).

Затем вы можете переопределить любое свойство, которое хотите в каждом из ваших проектов.

0 голосов
/ 31 августа 2018

Да, вы можете; о)

Добавьте папку с именем Свойства к каждому корню проекта и добавьте ссылку на AssemblyInfo_Shared.cs .

После этого необходимо установить в каждой конфигурации проекта .Net Standard / Core

<PropertyGroup>
  ...
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

Полное решение вы найдете по адресу https://github.com/SirRufo/SharedVersionTest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...