Получение PublicKeyToken.Net-сборок
Какой самый простой способ найти открытый ключ-токен сборки?
Самым простым способом, который я могу придумать, будет простой щелчок правой кнопкой мыши, получение открытого ключа, но этой функциональности нет, может быть, для этого есть расширение Visual Studio?
Я использую Visual Studio 2010, если расширение доступно.
Ответы
Ответ 1
Откройте командную строку и введите одну из следующих строк в соответствии с версией 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 больше не находится в корзине, а в подпапке. Кроме того, обратите внимание, что для 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
Ответ 2
другой вариант:
если вы используете 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, Version = 6.6.5.0, Культура = нейтральная, PublicKeyToken = c5687fc88969c44d
Ответ 3
Если библиотека включена в проект VS, вы можете проверить файл .cproj
, например:
<ItemGroup>
<Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...
Ответ 4
Если вы включили сборку в свой проект, вы можете сделать:
var assemblies =
AppDomain.CurrentDomain.GetAssemblies();
foreach (var assem in assemblies)
{
Console.WriteLine(assem.FullName);
}
Ответ 5
Вы можете легко получить это через С#
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;
}
Ответ 6
Вы можете добавить это как внешний инструмент в Visual Studio так:
Название:
Get PublicKeyToken
Команда:
c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe
(Путь может отличаться между версиями)
Аргументы:
-T "$(TargetPath)"
И проверьте параметр Использовать окно вывода.
Ответ 7
Самый простой способ для меня - использовать ILSpy.
Когда вы перетаскиваете сборку в свое окно и выбираете сниженную сборку слева, вы можете видеть токен открытого ключа в правой части окна.
(Я также думаю, что в новых версиях также будет отображаться открытый ключ подписи, если вам когда-нибудь понадобится этот... Смотрите здесь: https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234 Хороший материал!;))
Ответ 8
1) Команда C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}
В приведенном выше примере Microsoft SDK находится в папке C:\Program Files\Microsoft SDK\Windows\v6.0A. Ваша среда может отличаться.
2) Чтобы получить токен открытого ключа любого из ваших проектов, вы можете добавить sn.exe как часть внешних инструментов в Visual Studio. Этапы показаны в этой ссылке Microsoft: Как создать инструмент для получения открытого ключа сборки
Ответ 9
В качестве альтернативы вы также можете использовать linq
вот так -
string key = string.Join ("",assembly
.GetName()
.GetPublicKeyToken()
.Select (b => b.ToString ("x2")));
Ответ 10
выполнить этот оператор, используя PowerShell
([system.reflection.assembly]::loadfile("c:\yourdll.dll")).FullName
Ответ 11
В случае, если кто-то ищет открытый ключ сборки (как и я), а не токен открытого ключа - использование sn.exe прекрасно работает, за исключением того, что вы должны использовать переключатель -Tp, который будет возвращать оба открытых ключа. Ключ и токен открытого ключа - больше на https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx.
Ответ 12
Альтернативный метод будет, если у вас есть декомпилятор, просто посмотрите его там, они обычно предоставляют открытый ключ. Я посмотрел на .Net Reflector, Telerik Just Decompile и ILSpy просто декомпилируют, они, похоже, отображают токен открытого ключа.
Ответ 13
Этот пост в блоге был очень полезен при получении PublicKey (не открытого токена) сборки, которая может потребоваться, если вы используете сильные именованные сборки и StyleCop.
Ответ 14
Вы можете использовать Ildasm.exe(IL Disassembler), чтобы проверить метаданные сборки, содержащие полное имя.
После MSDN:
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
Ответ 15
Другой вариант - использовать для этого инструмент с открытым исходным кодом NuGet Package Explorer.
Из пакета Nuget (.nupkg) вы можете проверить PublicKeyToken или перетащить двоичный файл (.dll) в инструмент. Для последнего выберите сначала "Файл → Новый"
![enter image description here]()