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

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

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

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

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


person mike    schedule 12.05.2017    source источник


Ответы (1)


Здесь могут происходить некоторые вещи, и для их решения потребуется немного поработать.

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. Это может быть или не быть возможным в зависимости от того, какое поведение вы изменили в отношении этой библиотеки.

person mdip    schedule 17.09.2017