c# - example - Obtener el PublicKeyToken de ensamblados.Net
rsa c# (14)
¿Cuál es la forma más sencilla de encontrar el token de clave pública de un ensamblaje?
La manera más simple que puedo pensar sería un simple clic derecho, obtener la clave pública, pero esta fonctionnality no está allí, tal vez hay una extensión VS para eso.
Estoy usando VS2010, si hay una extensión disponible
1) El comando es C:/Program Files/Microsoft SDKs/Windows/v6.0A/bin/sn -T {your.dll}
En el ejemplo anterior, el SDK de Microsoft reside en C: / Archivos de programa / Microsoft SDKs / Windows / v6.0A. Su entorno puede diferir.
2) Para obtener el token de clave pública de cualquiera de sus proyectos, puede agregar sn.exe como parte de sus Herramientas externas en Visual Studio. Los pasos se muestran en este enlace de Microsoft: Cómo: Crear una herramienta para obtener la clave pública de una Asamblea
Abra un símbolo del sistema y escriba una de las siguientes líneas de acuerdo con su versión de Visual Studio y la arquitectura del sistema operativo:
VS 2008 en Windows 32bit :
"%ProgramFiles%/Microsoft SDKs/Windows/v6.0A/bin/sn.exe" -T <assemblyname>
VS 2008 en Windows 64bit:
"%ProgramFiles(x86)%/Microsoft SDKs/Windows/v6.0A/bin/sn.exe" -T <assemblyname>
VS 2010 en Windows 32bit:
"%ProgramFiles%/Microsoft SDKs/Windows/v7.0A/bin/sn.exe" -T <assemblyname>
VS 2010 en Windows 64bit:
"%ProgramFiles(x86)%/Microsoft SDKs/Windows/v7.0A/bin/sn.exe" -T <assemblyname>
VS 2012 en Windows 32bit:
"%ProgramFiles%/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/sn.exe" -T <assemblyname>
VS 2012 en Windows 64bit:
"%ProgramFiles(x86)%/Microsoft SDKs/Windows/v8.0A/bin/NETFX 4.0 Tools/sn.exe" -T <assemblyname>
VS 2015 en Windows 64bit:
"%ProgramFiles(x86)%/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.6.1 Tools/sn.exe" -T <assemblyname>
Tenga en cuenta que para las versiones VS2012 +, la aplicación sn.exe ya no está en el contenedor, sino en una subcarpeta. Además, tenga en cuenta que para 64 bits necesita especificar la carpeta (x86).
Si prefiere usar el símbolo del sistema de Visual Studio, simplemente escriba:
sn -T <assembly>
donde <assemblyname>
es una ruta de archivo completa al ensamblado que le interesa, rodeado de comillas si tiene espacios.
Puede agregar esto como una herramienta externa en VS, como se muestra aquí:
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx
Como alternativa, también puedes usar linq
esta manera:
string key = string.Join ("",assembly
.GetName()
.GetPublicKey()
.Select (b => b.ToString ("x2")));
En caso de que alguien buscara la clave pública de ensamblaje (como yo), no la clave pública , el uso de sn.exe funciona muy bien, excepto que debe usar el modificador -Tp, que devolverá tanto la clave pública como la clave pública - más en https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx .
Esta publicación de blog fue muy útil para obtener el PublicKey (no el Token de clave pública) del ensamblado, que puede ser necesario si está utilizando ensamblajes con nombre seguro y StyleCop.
La forma más simple para mí es usar ILSpy .
Cuando arrastra y suelta el ensamblaje en su ventana y selecciona el ensamblaje caído a la izquierda, puede ver el token de clave pública en el lado derecho de la ventana.
(También creo que las versiones más nuevas también mostrarán la clave pública de la firma, si alguna vez la necesita ... Consulte aquí: https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234 . ¡Buen material! ;))
Puede agregar esto como una herramienta externa a Visual Studio de esta manera:
Título:
Get PublicKeyToken
Mando:
c:/Program Files (x86)/Microsoft SDKs/Windows/v8.1A/bin/NETFX 4.5.1 Tools/sn.exe
(La ruta puede variar entre versiones)
Argumentos:
-T "$(TargetPath)"
Y marque la opción " Usar ventana de salida ".
Puede usar Ildasm.exe (IL Dessamblador) para examinar los metadatos del conjunto, que contiene el nombre completo.
Siguiendo MSDN: https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
Puedes obtener esto fácilmente a través de 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;
}
Si ha incluido el ensamblado en su proyecto, puede hacer:
var assemblies =
AppDomain.CurrentDomain.GetAssemblies();
foreach (var assem in assemblies)
{
Console.WriteLine(assem.FullName);
}
Si la biblioteca está incluida en el proyecto VS, puede verificar el archivo .cproj
, por ejemplo:
<ItemGroup>
<Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...
Un método alternativo sería si tienes descompilador, solo búscalo allí, generalmente proporcionan la clave pública. He visto .Net Reflector, Telerik Just Decompile e ILSpy simplemente descompilar, parecen tener el token de clave pública mostrado.
ejecutar esta declaración usando PowerShell
([system.reflection.assembly]::loadfile("c:/yourdll.dll")).FullName
otra opción:
si usa PowerShell, puede averiguar como:
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
me gusta
PS C:/Users/Pravat> ([system.reflection.assembly]::loadfile("dll full path")).FullName
y aparecerá como
MySql.Data, Version = 6.6.5.0, Culture = neutral, PublicKeyToken = c5687fc88969c44d