查找程序集的公钥令牌的最简单方法是什么?
我能想到的最简单的方法是简单的右键单击,获取公钥,但是此功能不存在,也许为此提供了Visual Studio扩展?
如果有扩展名,我正在使用Visual Studio 2010。
查找程序集的公钥令牌的最简单方法是什么?
我能想到的最简单的方法是简单的右键单击,获取公钥,但是此功能不存在,也许为此提供了Visual Studio扩展?
如果有扩展名,我正在使用Visual Studio 2010。
Answers:
打开命令提示符,然后根据您的Visual Studio版本和操作系统体系结构键入以下行之一:
32位Windows上的VS 2008:
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>
在64位Windows上的VS 2008:
"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>
32位Windows上的VS 2010:
"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>
在64位Windows上的VS 2010:
"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>
在32位Windows上的VS 2012:
"%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>
在64位Windows上的VS 2012:
"%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>
您感兴趣的程序集的完整文件路径在哪里,如果有空格,则用引号引起来。
您可以将其添加为VS中的外部工具,如下所示:http :
//blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token一个名为assembly.aspx的文件
"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>
。注意bin之后,sn会被夹在一个额外的文件夹级别中(在NETFX 4.0工具中)。
另外的选择:
如果使用PowerShell,则可以找到以下内容:
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,版本= 6.6.5.0,文化=中性,PublicKeyToken = c5687fc88969c44d
如果该库包含在VS项目中,则可以检查.cproj
文件,例如:
<ItemGroup>
<Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...
<Reference Include="System.Configuration" />
PublicKeyToken
,因此在其中进行查找.cproj
似乎是最简单的解决方案。
如果已将程序集包含在项目中,则可以执行以下操作:
var assemblies =
AppDomain.CurrentDomain.GetAssemblies();
foreach (var assem in assemblies)
{
Console.WriteLine(assem.FullName);
}
AppDomain.CurrentDomain.GetAssemblies()
。这将在立即窗口中列出已加载的程序集,并分别列出版本,区域性和PublicKeyToken。
您可以通过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;
}
typeof(YourPreferredTypeInThatAssembly).Assembly
或Assembly.GetAssembly(typeof(YourPreferredTypeInThatAssembly))
传递给该方法。
您可以将其作为外部工具添加到Visual Studio中,如下所示:
标题:
Get PublicKeyToken
命令:
c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe
(版本之间的路径可能有所不同)
参数:
-T "$(TargetPath)"
并选中“ 使用输出窗口 ”选项。
Tools
菜单中选择此项时,它将自动在您在解决方案资源管理器中选择的任何项目上运行。
Get PublicKeyToken on Solution Explorer Selection
。
对我而言,最简单的方法是使用ILSpy。
当您将程序集拖放到其窗口上并选择左侧的所放置的程序集时,您可以在窗口的右侧看到公钥标记。
(我还认为,如果需要的话,较新的版本也会显示签名的公钥...请参见此处:https : //github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234。好东西! ;))
1)命令是 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}
在上面的示例中,Microsoft SDK驻留在C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A中。您的环境可能有所不同。
2)要获取任何项目的公钥令牌,可以将sn.exe添加为Visual Studio中外部工具的一部分。Microsoft链接中显示了步骤:如何:创建工具以获取程序集的公钥
如果有人正在寻找程序集的公钥(例如我),而不是公钥令牌 -使用sn.exe效果很好,除了必须使用-Tp开关,它将同时返回公钥和公钥令牌-更多在https://msdn.microsoft.com/zh-cn/library/office/ee539398(v=office.14).aspx中。
另一个选择是为此使用开源工具NuGet Package Explorer。
您可以从Nuget包(.nupkg)中检查PublicKeyToken,或将二进制文件(.dll)拖动到工具中。对于后者,请选择第一个“文件->新”
您可以使用Ildasm.exe(IL反汇编程序)检查程序集的元数据,该元数据包含完全限定的名称。
遵循MSDN:https : //msdn.microsoft.com/zh-cn/library/2exyydhb(v= vs.110) .aspx