Практическое руководство. Настройка COM-компонентов на основе платформы .NET Framework для активации без регистрации
Активация компонентов на основе платформы .NET Framework без регистрации осуществляется лишь немного сложнее, чем для COM-компонентов. При установке требуются два манифеста:
Для определения управляемого компонента в COM-приложениях используется манифест приложения в стиле Win32.
Компоненты на основе платформы .NET Framework используют манифест компонента для получения необходимых для активации сведений во время выполнения.
В этом разделе описывается, как связать манифест приложения с приложением, манифест компонента с компонентом и внедрить манифест компонента в сборку.
Создание манифеста приложения
С помощью редактора XML создайте (или измените) манифест приложения, принадлежащий COM-приложению, которое взаимодействует с одним или несколькими управляемыми компонентами.
Вставьте следующий стандартный заголовок в начало файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
Дополнительные сведения об элементах манифеста и их атрибутах см. в статье Application Manifests (Манифесты приложений).
Определите владельца манифеста. В следующем примере владельцем файла манифеста является
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="msil" /> </assembly>
Определите зависимые сборки. В следующем примере
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" /> </dependentAssembly> </dependency> </assembly>
Сохраните файл манифеста под соответствующим именем. Имя манифеста приложения состоит из имени исполняемого файла сборки и расширения manifest. Например, для приложения myComApp.exe файл манифеста будет носить имя myComApp.exe.manifest.
Манифест приложения можно установить в тот же каталог, что и COM-приложение. Также его можно добавить в качестве ресурса в EXE-файл приложения. Дополнительные сведения см. в разделе О параллельных сборках.
Создание манифеста компонента
С помощью редактора XML создайте манифест компонента, описывающий управляемую сборку.
Вставьте следующий стандартный заголовок в начало файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> </assembly>
Определите владельца файла. Элемент
<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" processorArchitecture="msil" /> </assembly>
Определите каждый класс в сборке. Используйте
<clrClass>
элемент для уникальной идентификации каждого класса в управляемой сборке. Атрибуты элемента, вложенного в<assembly>
, определены в следующей таблице.Атрибут Description Обязательное поле clsid
Идентификатор, который задает активируемый класс. Да description
Строка, которая сообщает пользователю о компоненте. По умолчанию используется пустая строка. No name
Строка, представляющая управляемый класс. Да progid
Идентификатор, который используется для отложенной активации. No threadingModel
Потоковая модель COM. По умолчанию используется значение "Both" (Оба). No runtimeVersion
Используемая версия среды CLR. Если этот атрибут не задан, а среда CLR еще не загружена, компонент загружает последнюю установленную версию среды CLR, предшествующую версии 4. Если указать v1.0.3705, v1.1.4322 или v2.0.50727, автоматически выполняется накат версии до последней установленной версии среды CLR, предшествующей версии 4 (как правило, v2.0.50727). Если уже загружена другая версия среды CLR и не удается загрузить указанную версию в рамках параллельного процесса, загружается указанная версия. В противном случае используется загруженная версия CLR. Это может привести к сбою загрузки. No tlbid
Идентификатор библиотеки типов, содержащей сведения о типе класса. No Во всех тегах атрибутов учитывается регистр символов. Просматривая библиотеку типов, экспортированную для сборки с помощью средства ObjectViewer OLE/COM (Oleview.exe), можно получить идентификаторы классов (CLSID), программ (ProgID), потоковые модели и версию среды выполнения.
В следующем манифесте компонента определяются два класса:
testClass1
иtestClass2
.<?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.
Манифест компонента необходимо внедрить в сборку в качестве ресурса.
Внедрение манифеста компонента в управляемую сборку
Создайте скрипт ресурсов, содержащий следующую инструкцию:
1 RT_MANIFEST myManagedComp.manifest
В этой инструкции
myManagedComp.manifest
определяет имя внедряемого манифеста компонента. В этом примере файл скрипта будет носить имяmyresource.rc
.Скомпилируйте скрипт с помощью средства компиляции ресурсов Microsoft Windows (Rc.exe). В командной строке введите следующую команду:
rc myresource.rc
Программа Rc.exe создает файл ресурсов
myresource.res
.Снова скомпилируйте исходный файл сборки и укажите файл ресурсов с помощью параметра /win32res:
/win32res:myresource.res
Файл, содержащий внедренные ресурсы, также носит имя
myresource.res
.