Получение значения PublicKeyToken сборки of.Net


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

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

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

13 133

13 ответов:

Откройте командную строку и введите одну из следующих строк в соответствии с версией Visual Studio и архитектурой операционной системы :

VS 2008 на 32bit Windows:

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

VS 2008 на 64bit Windows:

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

VS 2010 на 32-битных окнах:

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

VS 2010 на 64bit Windows:

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

VS 2012 на 32bit Windows :

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

VS 2012 на 64bit Windows:

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

VS 2015 на 64bit Windows:

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

обратите внимание, что для версий VS2012+, sn.exe-приложение больше не находится в bin, а в подпапке. Также обратите внимание, что для 64bit вам нужно указать папку (x86).

если вы предпочитаете использовать командную строку Visual Studio, просто введите:

sn -T <assembly> 

здесь <assemblyname> полный путь к файлу сборка, которая вас интересует, окружена кавычками, если она имеет пробелы.

вы можете добавить это как внешний инструмент в VS, как показано here:
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx

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

Если вы используете 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.Данные, версия=6.6.5.0, культура=нейтральная, PublicKeyToken=c5687fc88969c44d

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

<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);
            }

вы можете получить это легко через 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;
}

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

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

(Я также думаю, что новые версии также будут отображать открытый ключ подписи, если вам когда-нибудь понадобится этот... Смотрите здесь: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

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

Аргументы:

-T "$(TargetPath)"

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

1) команда C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}

В приведенном выше примере корпорации Майкрософт СДК находится в C:\Program файлы\Microsoft пакет SDK папке\Windows\V6 двигателем.0А. Ваше окружение может отличаться.

2) чтобы получить токен открытого ключа любого вашего проекта, вы можете добавить sn.exe как часть ваших внешних инструментов в Visual Studio. Шаги показаны в эта ссылка Microsoft: Как создать инструмент для получения открытого ключа сборки

альтернативный метод будет, если у вас есть декомпилятор, просто посмотрите его там, они обычно предоставляют открытый ключ. Я посмотрел на .Net Reflector, Telerik просто декомпилировать и ILSpy просто декомпилировать они, кажется, имеют маркер открытого ключа отображается.

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

этой блоге было очень полезно получить PublicKey (не токен открытого ключа) сборки, который может потребоваться, если вы используете сильные именованные сборки и StyleCop.

вы можете использовать Ildasm.exe (Il Disassembler) для проверки метаданных сборки, которые содержат полное имя.

следующий веб-узел MSDN: https://msdn.microsoft.com/en-us/library/2exyydhb (v=vs. 110). aspx

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

    string key = string.Join ("",assembly
                                .GetName()
                                .GetPublicKey()
                                .Select (b => b.ToString ("x2")));