Получение PublicKeyToken сборок .Net - PullRequest
148 голосов
/ 15 июня 2010

Какой самый простой способ найти открытый ключ-токен сборки?

Самым простым способом, который я могу придумать, будет простой щелчок правой кнопкой мыши, получение открытого ключа, но этой функциональности нет, может быть, для этого есть расширение Visual Studio?

Я использую Visual Studio 2010, если доступно расширение.

Ответы [ 12 ]

210 голосов
/ 15 июня 2010

Откройте командную строку и введите одну из следующих строк в зависимости от версии 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>

VS 2015 на 64-битных Windows:

"%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-for-a-stong-named-assembly.aspx

76 голосов
/ 06 января 2014

другой вариант:

если вы используете 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

42 голосов
/ 20 марта 2014

Если библиотека включена в проект VS, вы можете проверить файл .cproj, например:

<ItemGroup>
    <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...
13 голосов
/ 22 декабря 2014

Вы можете легко получить это с помощью 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;
}
13 голосов
/ 15 июня 2010

Если вы включили сборку в свой проект, вы можете сделать:

            var assemblies =
                AppDomain.CurrentDomain.GetAssemblies();


            foreach (var assem in assemblies)
            {
                    Console.WriteLine(assem.FullName);
            }
9 голосов
/ 24 ноября 2014

Вы можете добавить это как внешний инструмент в Visual Studio следующим образом:

Заголовок:

Get PublicKeyToken

Команда:

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

(путь может отличаться в разных версиях)

Аргументы:

-T "$(TargetPath)"

И отметьте "Использовать окно вывода"опция.

8 голосов
/ 18 августа 2015

Самый простой способ для меня - использовать ILSpy .

Когда вы перетаскиваете сборку в ее окне и выбираете сброшенную сборку слева, вы можете видеть общедоступнуюключевой токен в правой части окна.

(я также думаю, что в более новых версиях также будет отображаться открытый ключ подписи, если он вам когда-нибудь понадобится ... См. здесь: https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234. Хорошие вещи!;))

5 голосов
/ 15 июня 2010

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: Как: создать инструмент для получения открытого ключа сборки

4 голосов
/ 17 января 2018

В качестве альтернативы вы также можете использовать linq вот так -

    string key = string.Join ("",assembly
                                .GetName()
                                .GetPublicKeyToken()
                                .Select (b => b.ToString ("x2")));
2 голосов
/ 26 января 2018

Если кто-то искал сборку Открытый ключ (как и я), а не Открытый ключ - использование sn.exe прекрасно работает, за исключением того, что вы должны использовать -Tp переключатель, который будет возвращать как открытый ключ, так и токен открытого ключа - больше на https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx.

...