Is this a good way to reference Thinktecture DLLs from a strongly-named .NET DLL?

0

PROBLEM:

I am trying to help a co-worker who wants to reference Thinktecture.IdentityModel.Client.Net45.dll from a VB.NET DLL –- call it MyVBNet.dll -- that is strongly-named. When we run an executable that references MyVBNet.dll, MyVBNet.dll’s attempt to instantiate a Thinktecture object results in the following exception:

 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)

Here is code that I added to the constructor of an object in MyVBNet.dll to reproduce the exception above:

 Dim lobjURI = New Uri("http://localhost:4200/")
 Dim lobjOAuth2Client = New Thinktecture.IdentityModel.Client.OAuth2Client(lobjURI)

POTENTIAL WORKAROUND:

I tried to work around the problem as follows and afterward was able to instantiate a Thinktecture OAuth2Client object in MyVBNet.dll on a Windows 10 computer. However, I do not know whether this is a good approach.

[1] Find a Developer Command Prompt in the Start menu and do "[right click] > Run as administrator" on it.

[2] In the resulting window, if you do not already have a SNK file with a strong name key, key in something similar to the following to create an SNK file, keyPair2.snk in the example:

 sn -k keyPair2.snk

[3] Copy a Thinktecture DLL to a directory, cd the Developer Command Prompt window to that directory, and key in the following, where Thinktecture.IdentityServer3.dll is an example of a 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] In Visual Studio, remove your current references to Thinktecture DLLs and replace them by doing "[right click] > Add Reference... > Browse..." on the References node in the Solution Explorer for the assembly to which you wish to add a reference. Then select the DLL that you want under C:\Windows\Microsoft.NET\assembly\GAC_MSIL.

identityserver4
asked on Stack Overflow Oct 1, 2019 by Alan Barksdale • edited Oct 1, 2019 by Alan Barksdale

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0