Начиная с версии 3.0, .NET устанавливает кучу различных «ссылочных сборок» в C: \ Program Files \ Reference Assemblies \ Microsoft .... для поддержки различных профилей (например, клиентский профиль .NET 3.5, профиль Silverlight).Каждая из них представляет собой правильную сборку .NET, которая содержит только метаданные (без кода IL), и каждая сборка помечается ReferenceAssemblyAttribute
.Метаданные ограничены этими типами и членами, доступными в соответствующем профиле - вот как intellisense показывает ограниченный набор типов и членов.Справочные сборки не используются во время выполнения.
Я немного узнал об этом из этого сообщения в блоге .
Я хотел бы создать и использовать такую справочную сборкудля моей библиотеки.
- Как создать сборку только для метаданных - есть ли какой-нибудь флаг компилятора или постпроцессор ildasm?
- Существуют ли атрибуты, определяющие, какие типы экспортируются в разные «профили»?
- Как разрешение эталонной сборки во время выполнения - если у меня в каталоге приложения была эталонная сборка вместо«реальная» сборка, а не в GAC, будет ли продолжаться зондирование, и мое событие AssemblyResolve будет запущено, чтобы я мог предоставить фактическую сборку во время выполнения?
Любые идеи или указатели, где я мог бы изучитья хотел бы получить дополнительную информацию об этом.
Обновление: Оглядываясь немного, я вижу, что "эталонные сборки" .NET 3.0, похоже, содержат некоторый код, а ReferenceАтрибут сборки был добавлен только в .NET 4.0.Таким образом, поведение может немного измениться с новым временем выполнения.
Почему? Для моей библиотеки надстроек Excel-DNA (http://exceldna.codeplex.com) я создаю один файлНадстройка .xll, упаковав указанные сборки в файл .xll в качестве ресурсов.Упакованные сборки включают код надстройки пользователя, а также управляемую библиотеку Excel-DNA (на которую может ссылаться сборка пользователя).
Звучит довольно сложно, но в большинстве случаев прекрасно работает - надстройка представляет собой один небольшой файл, поэтому не возникает проблем с распространением.Я сталкиваюсь с (не неожиданными) проблемами из-за разных версий - если старая версия управляемой библиотеки Excel-DNA в виде файла, среда выполнения загрузит ее вместо упакованной (у меня никогда не будет возможности вмешиваться взагрузка).
Я надеюсь создать справочную сборку для моей управляемой части Excel-DNA, на которую пользователи могут указать при компиляции своих надстроек.Но если они по ошибке имеют версию этой сборки во время выполнения, среда выполнения не сможет ее загрузить, и у меня будет возможность загрузить реальную сборку из ресурсов.