Мой проект Visual Studio 2008 ссылается на две (внешние) сборки (A + B), каждая из которых ссылается на одну и ту же третью сборку (C). Однако сборка A ожидает, что сборка C будет иметь открытый ключ, который отличается от того, что сборка B ожидает от него.
Вот пример очевидного исключения:
Не удалось загрузить файл или сборку 'Newtonsoft.Json, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken = 9ad232b50c3e6444' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)
Конечно, я не смог бы поместить обе версии C (отличающиеся только открытым ключом) в один и тот же каталог, поскольку их имена файлов совпадают. Во-вторых, я обнаружил, что использование привязки сборки из файла конфигурации позволяет только сопоставление версий, но не сопоставление с открытым ключом.
Я также пытался поместить одну из сборок C в отдельный каталог и настроить CLR для поиска в этом каталоге при загрузке сборок. Я не мог заставить это работать, к сожалению.
Мне известно, что перекомпиляция одной из внешних библиотек (одна из которых, как оказалось, имеет открытый исходный код) решит эту проблему, но я не хочу добавлять это бремя в мой план обслуживания, если это не является абсолютно необходимым
Итак, мой вопрос: как бы я сослался на обе «версии» сборки C, которые отличаются только открытым ключом?
UPDATE
Я наткнулся на этот ответ на связанный вопрос, предоставив интересное решение с использованием ilmerge. Я еще не проверил это, но это может быть полезно всем, кто борется с этой проблемой.