ПРОБЛЕМА:
Я пытаюсь помочь коллеге, который хочет сослаться на Thinktecture.IdentityModel.Client.Net45.dll
из DLL-библиотеки VB.NET - назовите ее MyVBNet.dll
- со строгим именем. Когда мы запускаем исполняемый файл, который ссылается на MyVBNet.dll
, MyVBNet.dll’s
попытка создания экземпляра объекта Thinktecture
приводит к следующему исключению:
FileLoadException was unhandled by user code
An exception of type 'System.IO.FileLoadException' occurred in MyVBNet.dll but was not handled in user code
Additional information: Could not load file or assembly 'Thinktecture.IdentityModel.Client.Net45, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. A strongly-named assembly is required. (Exception from HRESULT: 0x80131044)
Вот код, который я добавил в конструктор объекта вMyVBNet.dll, чтобы воспроизвести исключение выше:
Dim lobjURI = New Uri("http://localhost:4200/")
Dim lobjOAuth2Client = New Thinktecture.IdentityModel.Client.OAuth2Client(lobjURI)
ПОТЕНЦИАЛЬНОЕ ВОЗМОЖНОЕ РЕШЕНИЕ:
Я попытался обойти проблему следующим образом, а затем смог создать экземпляр объекта Thinktecture OAuth2Client в MyVBNet.dll. на компьютере с Windows 10. Однако я не знаю, является ли это хорошим подходом.
[1] Найдите командную строку разработчика в меню «Пуск» и выполните для нее «[правый клик]> Запуск от имени администратора».
[2] В появившемся окне, если у вас еще нет файла SNK с ключом строгого имени, введите что-то похожее на следующее, чтобы создать файл SNK, например keyPair2.snk:
sn -k keyPair2.snk
[3] Скопируйте DLL-библиотеку Thinktecture в каталог, перейдите в окно командной строки разработчика в этот каталог и введите следующую команду, где Thinktecture.IdentityServer3.dll является примером библиотеки Thinktecture DLL:
ildasm Thinktecture.IdentityServer3.dll /output:Thinktecture.IdentityServer3.il
move Thinktecture.IdentityServer3.dll Thinktecture.IdentityServer3.dll_Original
ilasm Thinktecture.IdentityServer3.il /dll /res:Thinktecture.IdentityServer3.res /key=keyPair2.snk
gacutil /i Thinktecture.IdentityServer3.dll
[4] В Visual Studio удалите текущие ссылки на DLL-библиотеки Thinktecture и замените их, выполнив «[правой кнопкой мыши]> Добавить ссылку ...> Обзор ...» на узле «Ссылки» в обозревателе решений длясборка, на которую вы хотите добавить ссылку. Затем выберите нужную DLL в папке C: \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL.