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.
User contributions licensed under CC BY-SA 3.0