Не удалось загрузить файл или сборку "AssemblyName PublicKeyToken = null" или одну из его зависимостей
{ "Не удалось загрузить файл или сборку" AssemblyName "," PublicKeyToken = null "или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)": "AssemblyName, PublicKeyToken = нуль" }
Я получаю соответствующее сообщение как InnerException.Message
при попытке отладки моего приложения после подписания неподписанных сторонних сборок, которые он использует.
Странно то, что я уже подписал сборку, показанную в сообщении, тот, который не может быть загружен.
В чем проблема? Как я могу это решить?
ИЗМЕНИТЬ
Редактирование, чтобы дать больше информации о том, что я сделал:
- Подписал все неподписанные сторонние сборки, на которые ссылается мой проект.
- Разберите эти сборки, чтобы убедиться, что они внутренне ссылаются на любые внешние неподписанные сборки (они этого не сделали)
- Удалены старые неподписанные сборки из списка ссылок на проект и повторно добавлены новые подписанные.
- Выгрузил проект и отредактировал ссылку сборки, которая не может быть загружена в XML-стиле .sln, добавив PublicKeyToken, отсутствующий в ссылке на сборку.
Сборка, которая генерирует исключение, так как проект строит отлично, это исключение во время выполнения, которое я получаю на InitializeComponent()
этой сборки, является компонентом с открытым исходным кодом с элементами управления WPF (MahApps.Metro). Я нашел аналогичный вопрос, но ни один из ответов не устранил проблему.
Как заставить WPF использовать URI ресурсов, которые используют сильное имя сборки? Argh!
Ответы
Ответ 1
PublicKeyToken = null указывает, что CLR ищет сборку без знака. Поскольку вы их подписали, это не будет работать хорошо, и ожидается, что этот кабум.
Вам нужно будет перестроить программу, чтобы она использовала обновленную подписанную сборку и вставляла ненулевой PublicKeyToken в манифест. Возможно, вам придется удалить существующую ссылку на сборку и добавить ее обратно, непонятно, возникла ли ваша программа с помощью неподписанной копии.
Используйте утилиту Fuslogvw.exe, если у вас все еще есть проблемы.
Ответ 2
Возможно, одна из ваших "неподписанных сторонних сборок" имеет ссылку на другую вашу "неподписанную стороннюю сборку" - так что ссылка неверна после того, как вы их подписали.
Возможно, этот инструмент может вам помочь: https://github.com/brutaldev/StrongNameSigner - он может обновлять сборки (это, вероятно, также может быть сделано с помощью командной строки, но я не знаю, как).
Ответ 3
- резервное копирование всей производственной DLL и файлов в другую папку - на всякий случай для отката
- скопируйте все производственные DLL, которые текущий процесс запущен в ваш локальный проект.
- ссылаются на все эти DLL на все связанные локальные проекты.
- Скомпилируйте и скопируйте DLL проекта, чтобы попытаться запустить службы окна.
пока еще не работает.
- резервное копирование всей производственной DLL и файлов в другую папку - на всякий случай для отката
- Скопируйте все новые скомпилированные DLL из локальных проектов и перетащите DLL в производственную папку
- запустите службу окна
Ответ 4
Я заметил, что вы сказали, что подписали сторонние библиотеки, но не забывайте также подписывать свои собственные сборки, которые также используют сторонние библиотеки. Самое главное - сборка с использованием подписанных libs. Так я недавно исправил эту проблему для себя.
Визуальная студия иногда слишком прощает и позволяет нам уйти больше, чем нужно. В других случаях? Не так много.
Обязательно очистите свой проект после внесения изменений. Затем перестройте решение. Надеюсь, это поможет вам сделать еще один шаг.