Не удалось загрузить файл или сборку "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. Так я недавно исправил эту проблему для себя.

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

Обязательно очистите свой проект после внесения изменений. Затем перестройте решение. Надеюсь, это поможет вам сделать еще один шаг.