How do I find the PublicKeyToken for a particular dll?
.NetDll.Net AssemblyPublickeytoken.Net Problem Overview
I need to recreate a provider in my web.config file that looks something like this:
<membership defaultProvider="AspNetSqlMemProvider">
<providers>
<clear/>
<add connectionStringName="TRAQDBConnectionString" applicationName="TRAQ" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0"
name="AspNetSqlMemProvider"
type="System.Web.Security.SqlMembershipProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
/>
</providers>
</membership>
However, I get a runtime error saying this assembly cannot be loaded, and I think it is because I have the wrong PublicKeyToken. How do I look up the PublicKeyToken for my assembly?
Alternatively, am I going entirely the wrong way with this?
.Net Solutions
Solution 1 - .Net
Using PowerShell, you can execute this statement:
([system.reflection.assembly]::loadfile("C:\..\Full_Path\..\MyDLL.dll")).FullName
The output will provide the Version, Culture and PublicKeyToken as shown below:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
Solution 2 - .Net
Solution 3 - .Net
If you have the DLL added to your project, you can open the csproj file and see the Reference tag.
Example:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Solution 4 - .Net
sn -T <assembly>
in Visual Studio command line.
If an assembly is installed in the global assembly cache, it's easier to go to C:\Windows\assembly
and find it in the list of GAC assemblies.
On your specific case, you might be mixing type full name with assembly reference, you might want to take a look at MSDN.
Solution 5 - .Net
Answer is very simple use the .NET Framework tools sn.exe
. So open the Visual Studio 2008 Command Prompt and then point to the dll’s folder you want to get the public key,
Use the following command,
sn –T myDLL.dll
This will give you the public key token. Remember one thing this only works if the assembly has to be strongly signed.
Example
C:\WINNT\Microsoft.NET\Framework\v3.5>sn -T EdmGen.exeMicrosoft (R) .NET Framework Strong Name Utility Version 3.5.21022.8 Copyright (c) Microsoft Corporation. All rights reserved.
Public key token is b77a5c561934e089
Solution 6 - .Net
I use Windows Explorer, navigate to C:\Windows\assembly , find the one I need. From the Properties you can copy the PublicKeyToken.
This doesn't rely on Visual Studio or any other utilities being installed.
Solution 7 - .Net
Just adding more info, I wasn't able to find sn.exe utility in the mentioned locations, in my case it was in C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
Solution 8 - .Net
> Assembly.LoadFile(@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\system.data.dll").FullName
Will result in
> System.Data, Version=4.0.0.0, Culture=neutral, > PublicKeyToken=b77a5c561934e089
Solution 9 - .Net
As @CRice said you can use the below method to get a list of dependent assembly with publicKeyToken
public static int DependencyInfo(string args)
{
Console.WriteLine(Assembly.LoadFile(args).FullName);
Console.WriteLine(Assembly.LoadFile(args).GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).SingleOrDefault());
try {
var assemblies = Assembly.LoadFile(args).GetReferencedAssemblies();
if (assemblies.GetLength(0) > 0)
{
foreach (var assembly in assemblies)
{
Console.WriteLine(" - " + assembly.FullName + ", ProcessorArchitecture=" + assembly.ProcessorArchitecture);
}
return 0;
}
}
catch(Exception e) {
Console.WriteLine("An exception occurred: {0}", e.Message);
return 1;
}
finally{}
return 1;
}
i generally use it as a LinqPad script you can call it as
DependencyInfo("@c:\MyAssembly.dll");
from the code
Solution 10 - .Net
You can also check by following method.
Go to Run : type the path of DLL for which you need public key. You will find 2 files :
- _AssemblyInfo.ini
- DLL file
Open this _AssemblyInfo.ini file in notepad , here you can see Public Key Token.
Solution 11 - .Net
For DLL generated by MSVC or others
Using pktextract to get publicKeyToken from '.cer'
https://docs.microsoft.com/en-us/windows/win32/sbscs/pktextract-exe
See details from other answer: https://stackoverflow.com/a/72190473/12529885
Solution 12 - .Net
If you want the token for something published on NuGet,
For example, OxyPlot.Wpf :
https://nuget.info/packages/OxyPlot.Wpf/2.1.0
and browse for the dll and its details.
Just change the nuget pkg name and version on the url for any other package.