获取.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