Это хороший способ ссылаться на DLL-библиотеки Thinktecture из строго названной .NET DLL? - PullRequest
0 голосов
/ 01 октября 2019

ПРОБЛЕМА:

Я пытаюсь помочь коллеге, который хочет сослаться на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...