获取.Net程序集的PublicKeyToken

find程序集公钥密码的最简单方法是什么?

我能想到的最简单的方法是简单的右键单击,获得公钥,但是这个function不存在,也许有一个VS扩展。

如果扩展名可用,我使用VS2010

打开命令提示符并根据您的Visual Studio版本和操作系统体系结构键入以下行之一:

VS 2008在32位Windows上

"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname> 

VS 2008在64位Windows上:

 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname> 

VS 2010在32位Windows上:

 "%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname> 

VS 2010在64位Windows上:

 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname> 

VS 2012在32位Windows上:

 "%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname> 

VS 2012在64位Windows上:

 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname> 

64位Windows上的VS 2015:

 "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe" -T <assemblyname> 

请注意,对于VS2012 +版本,sn.exe应用程序不再在bin中,而是在一个子文件夹中。 另外请注意,对于64位,您需要指定(x86)文件夹。

如果您更喜欢使用Visual Studio命令提示符,只需键入:

 sn -T <assembly> 

其中<assemblyname>是您感兴趣的程序集的完整文件path,如果它包含空格,则由引号括起来。

您可以将其添加为VS中的外部工具,如下所示:
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx

另外一个select:

如果你使用PowerShell,你可以find像:

 PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("C:\Program Files (x86)\MySQL\Connector NET 6.6.5\Assemblies\v4.0\MySql.Data.dll")).FullName 

喜欢

 PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("dll full path")).FullName 

会出现像

MySql.Data,Version = 6.6.5.0,Culture = neutral,PublicKeyToken = c5687fc88969c44d

如果该库包含在VS项目中,则可以检查.cproj文件,例如:

 <ItemGroup> <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL"> ... 

如果将程序集包含在项目中,则可以执行以下操作:

  var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var assem in assemblies) { Console.WriteLine(assem.FullName); } 

对我来说最简单的方法是使用ILSpy 。

在窗口上拖放程序集并select左侧的已删除程序集时,可以在窗口的右侧看到公钥标记。

(我也认为,更新的版本也将显示签名的公钥,如果你需要那个…看到这里: https : //github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234 。好东西! ;))

您可以将其作为外部工具添加到Visual Studio中,如下所示:

标题:

 Get PublicKeyToken 

命令:

 c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe 

(path可能会有所不同版本)

参数:

 -T "$(TargetPath)" 

并检查“ 使用输出窗口 ”选项。

1)命令是C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}

在上面的示例中,Microsoft SDK驻留在C:\ Program Files \ Microsoft SDK \ Windows \ v6.0A中。 你的环境可能有所不同

2)要获取任何项目的公钥令牌,可以将Visual Sn.exe作为Visual Studio中外部工具的一部分添加。 步骤显示在此Microsoft链接中:如何:创build一个工具来获取程序集的公钥

你可以很容易地通过c#

 private static string GetPublicKeyTokenFromAssembly(Assembly assembly) { var bytes = assembly.GetName().GetPublicKeyToken(); if (bytes == null || bytes.Length == 0) return "None"; var publicKeyToken = string.Empty; for (int i = 0; i < bytes.GetLength(0); i++) publicKeyToken += string.Format("{0:x2}", bytes[i]); return publicKeyToken; } 

使用PowerShell执行此语句

 ([system.reflection.assembly]::loadfile("c:\yourdll.dll")).FullName 

另一种方法是如果你有反编译器,只要在那里查找,他们通常会提供公钥。 我已经看过.Net Reflector,Telerik Just Decompile和ILSpy只是反编译,他们似乎有公钥显示。

这个博客文章在获取程序集的PublicKey(非公钥Key Token)方面非常有用,如果您使用的是强命名程序集和StyleCop,则可能需要该程序。

您可以使用Ildasm.exe(IL反汇编程序)来检查包含完全限定名称的程序集的元数据。

以下MSDN: https : //msdn.microsoft.com/en-us/library/2exyydhb(v= vs.110) .aspx