Wie finde ich die PublicKeyToken für eine bestimmte DLL?
-
19-09-2019 - |
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?
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
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