Описание тега pia
Общая информация из документации Microsoft по адресу https://msdn.microsoft.com/en-us/library/aa302338.aspx?f=255&MSPPError=-2147217396
Что такое PIA?
Как и любая другая управляемая сборка, сборка взаимодействия представляет собой набор типов, которые развертываются, управляются версиями и настраиваются как единое целое. Однако, в отличие от других управляемых сборок, сборка взаимодействия содержит определения типов (а не реализацию) типов, которые уже были определены в COM. Эти определения типов позволяют управляемым приложениям связываться с типами COM во время компиляции и предоставлять в среду CLR информацию о том, как типы должны быть маршалированы во время выполнения.
Хотя может существовать любое количество сборок взаимодействия, описывающих данный тип COM, только одна сборка взаимодействия помечена как PIA. PIA содержит официальное описание типов, определенных издателем этих типов. PIA может содержать определенные настройки, которые упрощают использование типов из управляемого кода. PIA всегда подписывается издателем исходного типа COM.
Любая сборка взаимодействия, не предоставленная издателем типов COM, считается неофициальной, и ее следует избегать. Поскольку типы, определенные в такой сборке, не должны подписываться издателем PIA, они несовместимы с определениями, предоставленными в PIA.
Почему важны PIA?
PIA важны, потому что они обеспечивают уникальную идентичность типа. PIA отличает официальные определения типов от поддельных определений, предоставляемых другими сборками взаимодействия. Наличие единого идентификатора типа обеспечивает совместимость типов между приложениями, которые совместно используют типы, определенные в PIA. Поскольку PIA подписан издателем и помечен атрибутом PrimaryInteropAssembly, его можно отличить от других сборок взаимодействия, которые определяют те же типы.
Как мне сделать PIA для моей библиотеки типов COM?
В большинстве случаев создать PIA просто. Инструмент Tlbimp (импортер библиотеки типов), входящий в состав Microsoft® .NET Framework SDK, может создавать сборку взаимодействия из существующей библиотеки типов. Ключ /primary на Tlbimp используется для создания PIA. Все PIA должны быть подписаны их издателем, поэтому ключ издателя также должен быть указан с переключателем /keyfile.