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

Using sn.exe utility:

sn -T YourAssembly.dll

or loading the assembly in Reflector.

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.exe

Microsoft (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 :

  1. _AssemblyInfo.ini
  2. 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMatthew JonesView Question on Stackoverflow
Solution 1 - .NetdanielBView Answer on Stackoverflow
Solution 2 - .NetDarin DimitrovView Answer on Stackoverflow
Solution 3 - .NetZanonView Answer on Stackoverflow
Solution 4 - .NetJoaquim RendeiroView Answer on Stackoverflow
Solution 5 - .NetPrasanna BalajeeView Answer on Stackoverflow
Solution 6 - .NetMike HoneyView Answer on Stackoverflow
Solution 7 - .NetHiramView Answer on Stackoverflow
Solution 8 - .NetCRiceView Answer on Stackoverflow
Solution 9 - .NetVinod SrivastavView Answer on Stackoverflow
Solution 10 - .NetMohit VermaView Answer on Stackoverflow
Solution 11 - .NetvrqqView Answer on Stackoverflow
Solution 12 - .NetNiraj AdhikariView Answer on Stackoverflow