获取.Net程序集的PublicKeyToken

moi*_*eme 155 .net visual-studio-2010 visual-studio public-key

查找程序集的Public-Key-Token的最简单方法是什么?

我能想到的最简单的方法是简单的右键单击,获取公钥,但是这个功能不存在,可能有一个Visual Studio扩展吗?

我正在使用Visual Studio 2010,如果有可用的扩展名.

dig*_*All 214

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

32位Windows上的VS 2008:

"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>
Run Code Online (Sandbox Code Playgroud)

在64位Windows上的VS 2008:

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

32位Windows上的VS 2010:

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>
Run Code Online (Sandbox Code Playgroud)

64位Windows上的VS 2010:

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

32位Windows上的VS 2012:

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

在64位Windows上的VS 2012:

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

64位Windows上的VS 2015:

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

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

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

sn -T <assembly> 
Run Code Online (Sandbox Code Playgroud)

where <assemblyname>是您感兴趣的程序集的完整文件路径,如果它有空格,则用引号括起来.

您可以在VS中将其添加为外部工具,如下所示:http:
//blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token -对于-A-杨卫国,命名assembly.aspx

  • 如果您使用的是64位计算机,请将%ProgramFiles%替换为%ProgramFiles(x86)%. (12认同)
  • 很好的阐述答案.对于VS2015,它应该在%ProgramFiles(x86)%\ Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe下 (2认同)

Muj*_*key 80

另外一个选项:

如果你使用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
Run Code Online (Sandbox Code Playgroud)

喜欢

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

并会显得像

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


use*_*923 44

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

<ItemGroup>
    <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...
Run Code Online (Sandbox Code Playgroud)

  • 我只看到<Reference Include ="System.IdentityModel"/>(与其他组合相同) (2认同)

apo*_*020 13

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

            var assemblies =
                AppDomain.CurrentDomain.GetAssemblies();


            foreach (var assem in assemblies)
            {
                    Console.WriteLine(assem.FullName);
            }
Run Code Online (Sandbox Code Playgroud)


Ada*_*ess 13

你可以通过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;
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*rod 9

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

标题:

Get PublicKeyToken
Run Code Online (Sandbox Code Playgroud)

命令:

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

(路径可能因版本而异)

参数:

-T "$(TargetPath)"
Run Code Online (Sandbox Code Playgroud)

并选中" 使用输出窗口 "选项.


use*_*353 8

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

将程序集拖放到其窗口并在左侧选择已删除的程序集时,可以在窗口右侧看到公钥标记.

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


Paw*_*ski 6

如果有人正在寻找程序集公钥(像我一样),而不是公钥令牌- 使用 sn.exe 效果很好,除非您必须使用-Tp开关,它将返回公钥和公钥令牌 - 更多在https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx


Syd*_*Syd 5

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)要获取任何项目的公钥标记,可以在Visual Studio中添加sn.exe作为外部工具的一部分.步骤显示在此Microsoft链接中:如何:创建工具以获取程序集的公钥


Yog*_*ogi 5

作为替代方案,您也可以linq像这样使用-

    string key = string.Join ("",assembly
                                .GetName()
                                .GetPublicKeyToken()
                                .Select (b => b.ToString ("x2")));
Run Code Online (Sandbox Code Playgroud)