Должны ли подписанные сборки взаимодействия? - PullRequest
8 голосов
/ 28 апреля 2009

У нас есть набор COM-компонентов, разработанных на VC ++. Когда ссылка на такой компонент добавляется в проект .NET, Visual Studio создает сборку взаимодействия. У нас сейчас есть множество таких сборок.

Выполняя нашу ежедневную сборку, мы подписываем все созданные двоичные файлы цифровой подписью. Сборки взаимодействия не подписаны, поскольку мы не считаем себя авторами - любой может использовать Visual Studio и создавать одинаковые сборки.

Должны ли мы также подписать сборки взаимодействия? Должны ли мы также подписать их строгим именем (утилита sn.exe)? Каковы причины для этого?

Ответы [ 3 ]

8 голосов
/ 28 апреля 2009

Это был сложный баланс в течение некоторого времени. Проблема заключается в том, что вам нужно распространять сборки Interop с вашим кодом и , возможно, вы подписываете свои собственные сборки. Если вы подписываете свою сборку, то также должны быть подписаны все сборки, на которые она ссылается, включая сборки Interop. Таким образом, вы должны подписать их.

Если вы распространяете автономное приложение, тогда нет никакого риска, и вам нужно просто пойти и подписать сборки, чтобы облегчить вашу жизнь.

Если вы распространяете библиотеки компонентов, все может быть немного сложнее, поскольку другой разработчик, использующий ваши библиотеки, может генерировать свои собственные сборки взаимодействия, но подписывать их своими собственными ключами. Это вызывает всевозможные проблемы с именами и зависимостями.

В зависимости от сложности ваших сборок Interop - вы можете сгенерировать прокси-код в отдельный файл .CS / .VB и скомпилировать его непосредственно в вашу сборку. Тогда вам не придется беспокоиться о проблемах со строгими именами.

3 голосов
/ 28 апреля 2009

Мы используем Sn.exe для строгого именования наших сборок взаимодействия, созданных инструментами, в качестве оберток вокруг COM-объектов. Мы должны сделать это, поскольку сборки, загружающие их, подписаны, следовательно, они должны быть подписаны.

Для генерации сборок взаимодействия мы используем:

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"

Очевидно, удалить / отложить, если вы полностью подписываете.

Что касается отказа в написании сборок, это может иметь место, но вы несете ответственность за них. Вы хотите, чтобы они не были заменены (случайно или нет) кем-либо еще, поэтому вам, вероятно, следует применять тот же уровень подписи / строгих имен, что и к другому коду.

0 голосов
/ 15 ноября 2013

Заменить "publickey" на "keyfile":

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...