Getting the PublicKeyToken of .Net assemblies

前端 未结 13 1040
忘掉有多难
忘掉有多难 2020-11-30 16:57

What is the simplest way to find the Public-Key-Token of an assembly?

The simplest way I can think of would be a simple right-click, get public key, but this functio

相关标签:
13条回答
  • 2020-11-30 17:50

    Open a command prompt and type one of the following lines according to your Visual Studio version and Operating System Architecture :

    VS 2008 on 32bit Windows :

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

    VS 2008 on 64bit Windows :

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

    VS 2010 on 32bit Windows :

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

    VS 2010 on 64bit Windows :

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

    VS 2012 on 32bit Windows :

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

    VS 2012 on 64bit Windows :

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

    VS 2015 on 64bit Windows :

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

    Note that for the versions VS2012+, sn.exe application isn't anymore in bin but in a sub-folder. Also, note that for 64bit you need to specify (x86) folder.

    If you prefer to use Visual Studio command prompt, just type :

    sn -T <assembly> 
    

    where <assemblyname> is a full file path to the assembly you're interested in, surrounded by quotes if it has spaces.

    You can add this as an external tool in VS, as shown here:
    http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx

    0 讨论(0)
  • 2020-11-30 17:53

    In case someone was looking for the assembly Public Key (like me), not the Public Key Token - using sn.exe works great, except you have to use -Tp switch, which will return both the Public Key and Public Key Token - more at https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx .

    0 讨论(0)
  • 2020-11-30 17:54

    You can add this as an external tool to Visual Studio like so:

    Title:

    Get PublicKeyToken
    

    Command:

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

    (Path may differ between versions)

    Arguments:

    -T "$(TargetPath)"
    

    And check the "Use Output window" option.

    0 讨论(0)
  • 2020-11-30 17:58

    You can get this easily via 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;
    }
    
    0 讨论(0)
  • 2020-11-30 17:58

    An alternate method would be if you have decompiler, just look it up in there, they usually provide the public key. I have looked at .Net Reflector, Telerik Just Decompile and ILSpy just decompile they seem to have the public key token displayed.

    0 讨论(0)
  • 2020-11-30 17:59

    As an alternative, you can also use linq like this -

        string key = string.Join ("",assembly
                                    .GetName()
                                    .GetPublicKeyToken()
                                    .Select (b => b.ToString ("x2")));
    
    0 讨论(0)
提交回复
热议问题