Pregunta

necesito para recrear un proveedor en mi archivo web.config que se ve algo como 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, me sale un error de ejecución diciendo esta asamblea no se puede cargar, y creo que es porque tengo el mal PublicKeyToken. ¿Cómo busco el PublicKeyToken para mi asamblea?

Como alternativa, voy por completo el camino equivocado con esto?

¿Fue útil?

Solución

Con PowerShell , puede ejecutar esta declaración:

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

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

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

Otros consejos

sn.exe utilidad:

sn -T YourAssembly.dll

o cargar el conjunto en Reflector .

Si usted tiene la DLL añade al 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" />

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

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

La respuesta es muy simple el uso de herramientas de .NET Framework sn.exe. Así que abre el Visual Studio 2008 símbolo del sistema ya continuación, elige la carpeta del archivo DLL que desea obtener la clave pública,

Utilice el siguiente comando,

sn –T myDLL.dll

Esto le dará el símbolo de clave pública. Recuerde una cosa esto sólo funciona si el conjunto tiene que ser 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

Yo uso el Explorador de Windows, vaya a C: \ Windows \ assembly, encontrar el que necesito. A partir de las propiedades que se pueden copiar el PublicKeyToken.

Esto no se basa en Visual Studio o cualquier otra utilidad que se instala.

Simplemente añadiendo más información, no fue capaz de encontrar sn.exe utilidad en los lugares mencionados, en mi caso fue en C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin

  

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

también se

  

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

También puede comprobar siguiendo el método.

Ir a Ejecutar: escriba la ruta de la DLL para el que necesita la clave pública. Hay 2 archivos: 1. __AssemblyInfo_.ini 2. El archivo DLL

Abrir este archivo en libreta __AssemblyInfo_.ini, aquí se puede ver la clave pública de emergencia.

Como @CRice dijo que se puede utilizar el método siguiente para obtener una lista de ensamblado dependiente con publicKeyToken

public static int DependencyInfo(string args) 
{
    Console.WriteLine(Assembly.LoadFile(args).FullName);
    Console.WriteLine(Assembly.LoadFile(args).GetCustomAttributes(typeof(System.Runtime.Versioning.TargetFrameworkAttribute), false).SingleOrDefault());
    try {
        var assemblies = Assembly.LoadFile(args).GetReferencedAssemblies(); 

        if (assemblies.GetLength(0) > 0)
        {
            foreach (var assembly in assemblies)
            {
                Console.WriteLine(" - " + assembly.FullName + ", ProcessorArchitecture=" + assembly.ProcessorArchitecture);             
            }
            return 0;
        }
    }
    catch(Exception e) {
        Console.WriteLine("An exception occurred: {0}", e.Message);
        return 1;
    } 
    finally{}

    return 1;
}

i generalmente lo uso como un LINQPad guión se le puede llamar como

DependencyInfo("@c:\MyAssembly.dll"); a partir del código

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top