.net get - ¿Cómo encuentro el PublicKeyToken para un dll en particular?




from how (9)

Usando la utilidad sn.exe :

sn -T YourAssembly.dll

o cargando el conjunto en Reflector .

Necesito recrear un proveedor en mi archivo web.config que se parece a esto:

<membership defaultProvider="AspNetSqlMemProvider">
  <providers>
    <clear/>
    <add connectionStringName="TRAQDBConnectionString" applicationName="TRAQ" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="0"
         name="AspNetSqlMemProvider"
         type="System.Web.Security.SqlMembershipProvider, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"
    />
  </providers>
</membership>

Sin embargo, recibo un error de tiempo de ejecución que indica que este ensamblaje no se puede cargar, y creo que es porque tengo el PublicKeyToken incorrecto. ¿Cómo busco PublicKeyToken para mi ensamblaje?

Alternativamente, ¿voy completamente mal con esto?


Utilizo Windows Explorer, navego a C: \ Windows \ assembly, encuentro el que necesito. Desde las Propiedades, puede copiar PublicKeyToken.

Esto no se basa en Visual Studio ni en ninguna otra utilidad que se esté instalando.


Assembly.LoadFile (@ "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.data.dll"). FullName

Resultará en

System.Data, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089


Solo agregué más información, no pude encontrar la utilidad sn.exe en las ubicaciones mencionadas, en mi caso fue en C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin


sn -T <assembly> en la línea de comandos de Visual Studio. Si se instala un ensamblado en el caché de ensamblados global, es más fácil ir a C:\Windows\assembly y encontrarlo en la lista de ensamblajes de GAC.

En su caso específico, es posible que esté mezclando el tipo de nombre completo con la referencia de ensamblado, es posible que desee echar un vistazo a MSDN .


Al usar PowerShell , puede ejecutar esta declaración:

([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName

La salida proporcionará la Versión, Cultura y PublicKeyToken como se muestra a continuación:

MyDLL, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 669e0ddf0bb1aa2a


Si tiene la DLL agregada a su proyecto, puede abrir el archivo csproj y ver la etiqueta de referencia.

Ejemplo:

<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

La respuesta es muy simple: use las herramientas de .NET Framework sn.exe . Abra el símbolo del sistema de Visual Studio 2008 y luego señale a la carpeta del dll que desea obtener la clave pública,

Use el siguiente comando

sn –T myDLL.dll

Esto le dará el token de clave pública. Recuerde una cosa, esto solo funciona si el ensamblaje debe estar fuertemente firmado.

Ejemplo

C:\WINNT\Microsoft.NET\Framework\v3.5>sn -T EdmGen.exe

Microsoft (R) .NET Framework Strong Name Utility  Version 3.5.21022.8
Copyright (c) Microsoft Corporation.  All rights reserved.

Public key token is b77a5c561934e089

No, no es posible. Las asambleas deben tener el mismo publicKeyToken.

La etiqueta bindingRedirect solo tiene los atributos oldVersion y newVersion, por lo que no hay manera de decirle acerca de la versión "nula" de todos modos.

Pero la verdadera razón detrás se explica debido al fuerte mecanismo de nombre.





.net dll .net-assembly publickeytoken