Frage

Ich brauche einen Anbieter in meiner web.config-Datei zu erstellen, die etwa wie folgt aussieht:

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

Allerdings erhalte ich einen Laufzeitfehler diese Versammlung sagte nicht geladen werden kann, und ich denke, es liegt daran, dass ich die falschen PublicKeyToken habe. Wie sehe ich die PublicKeyToken für meine Montage auf?

Alternativ werde ich völlig falsch mit diesem?

War es hilfreich?

Lösung

Mit Powershell , können Sie diese Anweisung ausführen:

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

Der Ausgang liefert die Version Kultur und PublicKeyToken wie folgt:

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

Andere Tipps

Mit sn.exe Dienstprogramm:

sn -T YourAssembly.dll

oder die Baugruppe das Laden in Reflector .

Wenn Sie die DLL Ihrem Projekt hinzugefügt haben, können Sie die csproj Datei öffnen und die Referenz-Tag sehen.

Beispiel:

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

sn -T <assembly> in Visual Studio-Befehlszeile. Wenn eine Assembly in dem global Assemblycache installiert ist, ist es einfacher, gehen Sie zu C:\Windows\assembly und es in der Liste der GAC-Baugruppen zu finden.

Auf Ihrem speziellen Fall, können Sie Typen vollständige Namen mit Montage Bezugnahme Mischen, können Sie unter MSDN .

Antwort ist sehr einfach Verwendung des .NET Framework-Tools sn.exe. So öffnen Sie die Visual Studio 2008-Eingabeaufforderung und dann auf den DLL Ordner zeigen mögen, dass Sie den öffentlichen Schlüssel erhalten,

Verwenden Sie den folgenden Befehl ein,

sn –T myDLL.dll

Dies wird Ihnen das öffentliche Schlüsseltoken. Denken Sie daran, eine Sache, das funktioniert nur, wenn die Montage stark unterzeichnet werden muss.

Beispiel

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

verwende ich Windows Explorer, navigieren Sie zu C: \ Windows \ Montage, finden die, die ich brauche. Von den Eigenschaften können Sie die PublicKeyToken kopieren.

Dies beruht nicht auf Visual Studio oder anderen Dienstprogramme installiert werden.

Just weitere Informationen hinzufügen, ich war nicht in der Lage Sn.exe Dienstprogramm in den genannten Orten zu finden, in meinem Fall war es in C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ V7.0A \ ist

  

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

Wird in Folge

  

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

Sie können auch überprüfen, indem Methode folgen.

Zum Ausführen: den Pfad der DLL für die Sie den öffentlichen Schlüssel benötigen. Sie werden 2 Dateien: 1. __AssemblyInfo_.ini 2. DLL-Datei

Öffnen Sie diese __AssemblyInfo_.ini Datei in Notepad, hier können Sie Public Key Token sehen.

Wie @CRice sagt Sie die folgende Methode können Sie eine Liste der abhängigen Assembly mit PublicKeyToken bekommen

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

ich benutze es in der Regel als LinqPad script Sie können es als

nennen

DependencyInfo("@c:\MyAssembly.dll"); aus dem Code

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top