Практическое руководство. Настройка компонентов на основе платформы .NET Framework для активации без регистрации.
Обновлен: Ноябрь 2007
Активация без регистрации для компонентов на основе .NET не намного сложнее, чем та же процедура для COM-компонентов. При установке требуются два манифеста:
COM-приложениям требуется манифест приложения в стиле Win32, позволяющий определить управляемый компонент;
.компонентам на основе .NET для получения сведений об активации, необходимых во время выполнения, требуется манифест компонента.
В этом разделе описывается процесс связывания манифеста приложения с приложением, процесс связывания манифеста компонента с компонентом, а также процесс встраивания манифеста компонента в сборку.
Создание манифеста приложения
С помощью XML-редактора создайте (или измените) манифест приложения, принадлежащий COM-приложению, которое взаимодействует с одним или несколькими управляемыми компонентами.
В начало файла вставьте следующий стандартный заголовок:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
Сведения об элементах манифеста и их атрибутах можно получить с помощью поиска в библиотеке MSDN по ключевым словам "справка о манифестах приложений".
Укажите владельца манифеста. В следующем примере владельцем файла манифеста является myComApp версии 1.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" />
Укажите зависимые сборки. В следующем примере myComApp зависит от myManagedComp.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" name="myOrganization.myDivision.myComApp" version="1.0.0.0" processorArchitecture="x86" publicKeyToken="8275b28176rcbbef" /> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="myOrganization.myDivision.myManagedComp" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="8275b28176rcbbef" language="*" /> </dependentAssembly> </dependency> </assembly>
Присвойте файлу манифеста имя и сохраните файл. Имя манифеста приложения — это имя исполняемого файла сборки с расширением MANIFEST. Например, имя файла манифеста приложения для myComApp.exe — myComApp.exe.manifest.
Манифест приложения можно установить в ту же папку, что и COM-приложение. Либо Его можно добавить в виде ресурса в исполняемый файл (EXE) приложения. Дополнительные сведения можно получить с помощью поиска в библиотеке MSDN по ключевым словам "Параллельные сборки".
Создание манифеста компонента
С помощью XML-редактора создайте манифест компонента, который будет описывать управляемую сборку.
В начало файла вставьте следующий стандартный заголовок:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
Укажите владельца файла. Элемент <assemblyIdentity> элемента <dependentAssembly> в файле манифеста приложения должен соответствовать элементу манифеста компонента. В следующем примере владельцем файла манифеста является компонент myManagedComp версии 1.2.3.4.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef"
Укажите каждый класс сборки. С помощью элемента <clrClass> уникальным образом определите каждый класс управляемой сборки. Элемент, являющийся подэлементом элемента <assembly>, имеет атрибуты, описанные в следующей таблице.
Атрибут
Описание
Обязательность
clsid
Идентификатор, который задает активируемый класс.
Да
description
Строка, предоставляющая пользователю сведения о компоненте. Значение по умолчанию — пустая строка.
Нет
name
Строка, представляющая управляемый класс.
Да
progid
Идентификатор, используемый для отложенной активации.
Нет
threadingModel
Модель потоков COM. Значение по умолчанию — "Both".
Нет
runtimeVersion
Этот атрибут не обрабатывается. Если среда выполнения еще не загружена, перед активацией класса будет загружена среда выполнения самой поздней версии. В противном случае используется уже загруженная версия.
Нет
tlbid
Идентификатор библиотеки типов, содержащей сведения о типе для класса.
Нет
Все теги атрибутов зависят от регистра. Значения CLSID, ProgID, модели потоков и номер версии среды выполнения можно получить, найдя в библиотеке экспортированных типов сборку с помощью программы просмотра объектов OLE/COM (Oleview.exe).
Следующий манифест компонента определяет один класс с двумя методами.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="myOrganization.myDivision.myManagedComp" version="1.2.3.4" /> publicKeyToken="8275b28176rcbbef" <clrClass clsid="{65722BE6-3449-4628-ABD3-74B6864F9739}" progid="myManagedComp.testClass1" threadingModel="Both" name="myManagedComp.testClass1" runtimeVersion="v1.0.3705"> </clrClass> <clrClass clsid="{367221D6-3559-3328-ABD3-45B6825F9732}" progid="myManagedComp.testClass2" threadingModel="Both" name="myManagedComp.testClass2" runtimeVersion="v1.0.3705"> </clrClass> <file name="MyManagedComp.dll"> </file> </assembly>
Присвойте файлу манифеста имя и сохраните файл. Имя манифеста компонента — это имя библиотеки сборки с расширением MANIFEST. Например, файл манифеста библиотеки myManagedComp.dll будет иметь имя myManagedComp.manifest.
Манифест компонента необходимо встроить в сборку в качестве ресурса.
Встраивание манифеста компонента в управляемую сборку
Создайте описание ресурса, содержащее следующую инструкцию:
RT_MANIFEST 1 myManagedComp.manifest
В этой инструкции myManagedComp.manifest — это имя встраиваемого манифеста компонента. Для этого примера именем файла сценария является myresource.rc.
Выполните компиляцию сценария с помощью компилятора ресурсов Microsoft Windows (Rc.exe). В командной строке введите следующую команду:
rc myresource.rc
Rc.exe создает файл ресурсов myresource.res.
Снова выполните компиляцию исходного файла сборки и укажите файл ресурса с помощью параметра /win32res:
/win32res:myresource.res
В этом случае myresource.res — имя файла ресурсов, содержащего встроенный ресурс.
См. также
Основные понятия
Требования для COM-взаимодействия, не требующего регистрации
Настройка COM-компонентов для активации без регистрации