Поиск…


замечания

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

[AssemblyTitle]

Этот атрибут используется для указания имени этой конкретной сборки.

[assembly: AssemblyTitle("MyProduct")]

[AssemblyProduct]

Этот атрибут используется для описания продукта, для которого предназначена эта конкретная сборка. Несколько сборок могут быть компонентами одного и того же продукта, и в этом случае все они могут иметь одинаковое значение для этого атрибута.

[assembly: AssemblyProduct("MyProduct")]

Глобальная и местная AssemblyInfo

Наличие глобального допускает улучшение СУХОЙ, вам нужно только поместить значения, которые отличаются от AssemblyInfo.cs для проектов, имеющих дисперсию. Это использование предполагает, что ваш продукт имеет более одного проекта визуальной студии.

GlobalAssemblyInfo.cs

using System.Reflection;
using System.Runtime.InteropServices;
//using Stackoverflow domain as a made up example    

// It is common, and mostly good, to use one GlobalAssemblyInfo.cs that is added 
// as a link to many projects of the same product, details below
// Change these attribute values in local assembly info to modify the information.
[assembly: AssemblyProduct("Stackoverflow Q&A")]
[assembly: AssemblyCompany("Stackoverflow")]
[assembly: AssemblyCopyright("Copyright © Stackoverflow 2016")]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4e4f2d33-aaab-48ea-a63d-1f0a8e3c935f")]
[assembly: ComVisible(false)] //not going to expose ;)

// Version information for an assembly consists of the following four values:
// roughly translated from I reckon it is for SO, note that they most likely 
// dynamically generate this file
//      Major Version  - Year 6 being 2016
//      Minor Version  - The month
//      Day Number     - Day of month
//      Revision       - Build number
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: [assembly: AssemblyVersion("year.month.day.*")]
[assembly: AssemblyVersion("2016.7.00.00")] 
[assembly: AssemblyFileVersion("2016.7.27.3839")]

AssemblyInfo.cs - по одному для каждого проекта

//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]

Вы можете добавить GlobalAssemblyInfo.cs в локальный проект, используя следующую процедуру :

  1. Выберите Добавить / Существующий элемент ... в контекстном меню проекта
  2. Выберите GlobalAssemblyInfo.cs
  3. Разверните кнопку «Добавить», нажав на эту маленькую стрелку вниз по правой руке
  4. Выберите «Добавить как ссылку» в раскрывающемся списке кнопок

[AssemblyVersion]

Этот атрибут применяет версию к сборке.

[assembly: AssemblyVersion("1.0.*")]

Символ * используется для автоматического увеличения части версии автоматически каждый раз, когда вы компилируете (часто используется для числа «build»)

Атрибуты ассемблера чтения

Используя богатые API-интерфейсы .NET, вы можете получить доступ к метаданным сборки. Например, вы можете получить атрибут title this сборки со следующим кодом

using System.Linq;
using System.Reflection;

...

Assembly assembly = typeof(this).Assembly;
var titleAttribute = assembly.GetCustomAttributes<AssemblyTitleAttribute>().FirstOrDefault();

Console.WriteLine($"This assembly title is {titleAttribute?.Title}");

Автоматическое управление версиями

У вашего кода в исходном элементе есть номера версий по умолчанию (SVN-идентификаторы или хэши Git SHA1) или явно (теги Git). Вместо того, чтобы вручную обновлять версии в AssemblyInfo.cs, вы можете использовать процесс времени сборки для записи версии из вашей системы управления версиями в файлы AssemblyInfo.cs и, следовательно, на свои сборки.

Примерами вышеупомянутых пакетов являются пакеты GitVersionTask или SemVer.Git.Fody NuGet. Например, чтобы использовать GitVersionTask, после установки пакета в вашем проекте удалите атрибуты Assembly*Version из файлов AssemblyInfo.cs. Это ставит GitVersionTask на управление версиями ваших сборок.

Обратите внимание, что Semantic Versioning становится стандартом de facto, поэтому эти методы рекомендуют использовать теги управления версиями, которые следуют за SemVer.

Общие поля

Хорошей практикой является заполнение полей по умолчанию в AssemblyInfo. Информация может быть получена установщиками и затем появится при использовании программ и функций (Windows 10) для удаления или изменения программы.

Минимум должен быть:

  • AssemblyTitle - обычно пространство имен, то есть MyCompany.MySolution.MyProject
  • AssemblyCompany - полное юридическое лицо
  • AssemblyProduct - маркетинг может иметь представление здесь
  • AssemblyCopyright - держите его в курсе событий, поскольку он выглядит неряшливым в противном случае

«AssemblyTitle» становится «описанием файла» при просмотре вкладки «Свойства» библиотеки DLL.

[AssemblyConfiguration]

AssemblyConfiguration: Атрибут AssemblyConfiguration должен иметь конфигурацию, которая была использована для сборки сборки. Используйте условную компиляцию для правильного включения различных конфигураций сборок. Используйте блок, подобный приведенному ниже примеру. Добавьте столько разных конфигураций, сколько вы обычно используете.

#if (DEBUG)

[assembly: AssemblyConfiguration("Debug")]

#else

[assembly: AssemblyConfiguration("Release")]

#endif

[InternalsVisibleTo]

Если вы хотите сделать internal классы или функции сборки доступными из другой сборки, вы объявляете это по InternalsVisibleTo и имени сборки, доступ к которой разрешен.

В этом примере код в сборке MyAssembly.UnitTests разрешен для вызова internal элементов из MyAssembly .

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Это особенно полезно для модульного тестирования, чтобы предотвратить ненужные public объявления.

[AssemblyKeyFile]

Всякий раз, когда мы хотим, чтобы наша сборка была установлена ​​в GAC, необходимо иметь сильное имя. Для сильной сборки именования мы должны создать открытый ключ. Чтобы сгенерировать файл .snk .

Чтобы создать сильный ключевой файл имени

  1. Командная строка разработчика для VS2015 (с доступом администратора)
  2. В командной строке введите cd C: \ Directory_Name и нажмите клавишу ВВОД.
  3. В командной строке введите sn -k KeyFileName.snk и нажмите клавишу ВВОД.

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

Свойства -> AssemblyInfo.cs

[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]

Thi создаст сильную сборку имен после сборки. Создав сильную сборку имен, вы можете установить ее в GAC

Счастливое кодирование :)



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow