Domanda

Ho bisogno di ricreare un fornitore nel mio file web.config che sembra qualcosa di simile:

<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>

Tuttavia, ottengo un errore di runtime dicendo questa assemblea non può essere caricato, e penso che è perché ho il torto PublicKeyToken. Come faccio a guardare il PublicKeyToken per il mio montaggio?

In alternativa, faccio tutto il modo sbagliato in questo?

È stato utile?

Soluzione

Utilizzando PowerShell , è possibile eseguire questa istruzione:

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

L'uscita fornirà il Versione , Cultura e PublicKeyToken , come illustrato di seguito:

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

Altri suggerimenti

sn.exe utilità:

sn -T YourAssembly.dll

o caricare il gruppo in riflettore .

Se avete la DLL aggiunto al progetto, è possibile aprire il file csproj e vedere il tag di riferimento.

Esempio:

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

sn -T <assembly> in Visual Studio riga di comando. Se un assembly è installato nella global assembly cache, è più facile andare a C:\Windows\assembly e trovarlo nella lista delle assemblee GAC.

Sul vostro caso specifico, si potrebbe essere miscelazione tipo nome completo con riferimento montaggio, si potrebbe voler dare un'occhiata a MSDN .

La risposta è molto semplice l'utilizzo di .NET Framework strumenti sn.exe. Quindi aprire il Visual Studio 2008 prompt dei comandi e quindi scegliere la cartella del dll che si desidera ottenere la chiave pubblica,

Utilizzare il comando seguente,

sn –T myDLL.dll

Questo vi darà il token di chiave pubblica. Ricordate una cosa che questo funziona solo se l'assemblea deve essere fortemente firmato.

Esempio

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

Io uso di Windows Explorer, passare a C: \ Windows \ assembly, trovare quello che mi serve. Dalla proprietà è possibile copiare il PublicKeyToken.

Questo non si basa su Visual Studio o qualsiasi altra utilità in fase di installazione.

Solo l'aggiunta di ulteriori informazioni, non ero in grado di trovare sn.exe utilità nelle località menzionate, nel mio caso era in C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ bin

  

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

Si tradurrà in

  

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

È inoltre possibile controllare con il seguente metodo.

Vai Run: digitare il percorso della DLL per cui è necessario chiave pubblica. Troverete 2 file: 1. __AssemblyInfo_.ini 2. il file DLL

Aprire questo file __AssemblyInfo_.ini nel blocco note, qui potete vedere Public Key Token.

Come @CRice detto è possibile utilizzare il seguente metodo per ottenere un elenco di assembly dipendente 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;
}

Io in genere uso come LINQPad di script si può chiamare come

DependencyInfo("@c:\MyAssembly.dll"); dal codice

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top