Запустить настроенную версию сторонней сборки без строгой подписи

Я хочу внести изменения в сборку (MySQL соединительная сеть), я успешно собираю dll, но когда я пытаюсь запустить свое веб-решение, я получаю:

Не удалось загрузить файл или сборку "MySql.Data" или одну из ее зависимостей. Подпись строгого имени не может быть проверена. Возможно, сборка была подделана или была подписана с задержкой, но не полностью подписана с правильным закрытым ключом.

конечно, у меня нет файла ключа строгого имени для подписи, когда я собираю dll.

Как я могу заставить свой проект распознавать dll, не проверяя подпись со строгим именем? или есть какая-то другая работа вокруг?

2 ответа

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

MySql.Data - строгое имя, подписанное. Чтобы создать файл MySql.Data.dll, на который может ссылаться другой скомпилированный код, необходимо иметь доступ к паре ключей, используемой для подписи файла MySql.Data.dll. У вас нет доступа к этому, только у пользователей MySql (мы надеемся, в любом случае), потому что утечка, которая позволит кому-то создать вредоносный MySql.Data.dll и иметь другие компоненты, которые ссылаются на него, использует эту DLL. Сильные названия призваны предотвратить этот случай.

Я предполагаю, что проект MySql.Data настроен на задержку подписывания.dll с публичной частью пары ключей. У вас нет частной части этой пары ключей, поэтому вы не можете завершить процесс подписания самостоятельно.

Решение состоит в том, чтобы сгенерировать новый файл key.snk, настроить проект на использование этого ключа, отключить задержку подписывания этого проекта и выполнить повторную сборку.

Проблема, с которой вы столкнетесь, заключается в том, что любые другие библиотеки, которые ссылаются на MySql.Data.dll будем делать это со строгим именем, используемым в надлежащем MySql.Data.dll, Таким образом, любые другие библиотеки, которые вы используете, какие ссылки MySql.Data.dll их ссылки должны быть изменены на строгое имя вашей библиотеки.

Вам нужно изменить ссылки на эти библиотеки (либо получая исходный код, либо используя ildasm.exe). Затем вам нужно изменить ссылки, чтобы использовать вашу библиотеку с новым строгим именем и перестроить эти библиотеки. Если эти ссылки также подписаны строгим именем, вам придется уйти в отставку с новым ключом и повторить этот же процесс для всех библиотек, которые ссылаются на эту библиотеку.

Вы можете представить, как это может выйти из-под контроля довольно быстро. Лучшим вариантом, если это возможно, будет создание новой библиотеки, которая ссылается на MySql.Data.dll и расширять настроенные вами классы / компоненты, не касаясь MySql.Data.dll код библиотеки. Это может или не может быть возможным в зависимости от того, какое поведение вы изменили по отношению к этой библиотеке.

Для моей цели (изменение MySql Bug 109331) было легко отключить проверку с помощью инструмента Strong Name из .Net SDK, поскольку MySql.Data представляет собой сборку знака задержки.

      sn -Vr .\MySql.Data.dll
    
Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Verification entry added for assembly 'MySql.Data,C5687FC88969C44D'
Другие вопросы по тегам