VSIX не может найти статический метод в другой DLL

Проблема
У меня есть статический (метод расширения), на который ссылаются в моем проекте VSIX. Когда я компилирую проект VSIX, я могу видеть dll в папке bin / debug вместе с dll VSIX (та же папка).

Кроме того, intellisense не имеет проблем ни с этим, ни с компиляцией! При запуске проекта VSIX в режиме отладки. Я вижу эту ошибку:

«Метод не найден:» система.String MethodName (System.String)», который является методом расширения в другой сборке (в папке bin/debug).

Я читал другие сообщения, как эти:

Не удается найти библиотеки DLL VSIX с DllImport

Включите внешнее .dll в расширении Visual Studio

Оба решения не выглядят правильно для меня, в конце концов, dll находится в нужной папке, он находит свой собственный код, но не другую сборку…. Ссылки и использование инструкций и intellisense работают!

Это говорит мне, что это проблема загрузчика, каким-то образом проекты VSIX не могут загрузить другие ссылочные сборки или, возможно, это по дизайну.

Я пытался загрузить их в качестве активов, но они не являются «другими» проектами VSIX, поэтому все варианты активов отсутствуют.

Введите описание изображения здесь

Обратите внимание, однако, что все эти типы активов имеют префикс Microsoft.VisualStudio. Я пробовал Microsoft.VisualStudio.Сборка и они не работают, на самом деле это портит манифест, пытаясь сделать это.

Еще одна странность, я включил ссылку на еще одну сборку, которая входит в качестве EXE. Все эти методы работают хорошо. Это просто библиотеки DLL, которые не загружаются. Для них я не могу использовать оператор USING, скорее, я должен использовать полностью квалифицированное имя пространства имен, чтобы заставить его работать… Но если я попробую тот же трюк на DLL, это не сработает.

В одном из сообщений было предложено добавить сборки вручную в файл манифеста… но этот пост был в 2010 году.

Это также не работает:

Чтобы включить вспомогательные библиотеки DLL из связанных сборок в пакет VSIX, добавьте SatelliteDllsProjectOutputGroup в выходные группы, включенные в свойство VSIX.

Чего мне не хватает?

1 ответ

  1. Основной причиной этой проблемы является то, что по умолчанию VSIX want’s everything to be Strong Named. Я снял этот флажок из-за сторонних библиотек DLL, которые не были подписаны. Мне удалось получить источник и «сильное название» их.

    Я тогда Стронг назвал проект VSIX и все сработало.

    Перейдите на страницу свойств проекта:

    Введите описание изображения здесь

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

    https://brutaldev.com/post/net-assembly-strong-name-signer