[assembly:System.CLSCompliantAttribute(true)]
Если теперь добавить фрагмент программного кода, который выходит за пределы спецификации CLS (например, элемент данных без знака)
// Типы ulong не согласуется с CLS.
public class Winnebago {
public ulong notCompliant;
}
то будет сгенерирована ошибка компиляции.
Файл AssemblyInfo.cs в Visual Studio 2005
По умолчанию Visual Studio 2005 генерирует файл с именем AssemblyInfo.cs (рис. 12.9).
Рис. 12.9. Файл AssemblyInfo.cs
Этот файл является удобным местом для хранения атрибутов, которые должны применяться на уровне компоновочного блока. В табл. 12.4 приводится список некоторых атрибутов уровня компоновочного блока, о которых вам следует знать.
Исходный код. Проект AttributedCarLibrary размещен в подкаталоге, соответствующем главе 12.
Таблица 12.4. Некоторые атрибуты уровня компоновочного блока
| Атрибут | Описание |
|---|---|
| AssemblyCompanyAttribute | Содержит общую информацию о компании |
| AssemblyCopyrightAttribute | Содержит информацию об авторских правах на продукт или компоновочный блок |
| AssemblyCultureAttribute | Дает информацию о параметрах локализации или языках, поддерживаемых компоновочным блоком |
| AssemblyDescriptionAttribute | Содержит описание продукта или модулей, из которых состоит компоновочный блок |
| AssemblyKeyFileAttribute | Указывает имя файла, содержащего пару ключей, используемых для создания подписи компоновочного блока |
| AssemblyOperatingSystemAttribute | Обеспечивает информацию о том, на поддержку какой операционной системы рассчитан компоновочный блок |
| AssemblyProcessorAttribute | Обеспечивает информацию о том, на поддержку какого процессора рассчитан компоновочный блок |
| AssemblyProductAttribute | Обеспечивает информацию о продукте |
| AssemblyTrademarkAttribute | Обеcпечивает информацию о торговой марке |
| AssemblyVersionAttribute | Указывает информацию версии компоновочного блока, в формате‹ |
Отображение атрибутов при статическом связывании
Как уже упоминалось в этой главе, атрибуты будут бесполезны до тех пор, пока некоторый фрагмент программного обеспечения не выполнит их отображение. После выявления атрибута соответствующий фрагмент программного обеспечения может выбрать подходящее действие. Как и само приложение, этот "фрагмент программного обеспечения" может для выявления пользовательского атрибута использовать статическое или динамическое связывание. Для статического связывания требуется, чтобы приложение-клиент к моменту компиляции уже имели определение соответствующего атрибута (в нашем случае это атрибут VehicleDescriptionAttribute). Компоновочный блок AttributedCarLibrary определяет пользовательский атрибут, как открытый класс, поэтому статическое связывание в данном случае будет наилучшим выбором.
Для иллюстрации процесса отображения пользовательских атрибутов создайте новое консольное приложение C# с именем VehicleDescriptionAttributeReader. Затем установите в нем ссылку на компоновочный блок AttributedCarLibrary. Наконец, поместите в исходный файл *.cs следующий программный код.
// Отображение пользовательских атрибутов при статическом связывании.
using System;
using AttributedCarLibrary;
public class Program {
static void Main(string [] args) {
// Получение Type для представления Winnebago.
Type t = typeof(Winnebago);
// Получение атрибутов Winnebago.
object[] customAtts = t.GetCustomAttributes(false);
// Печать описания.