Comment puis-je trouver les PublicKeyToken pour une dll?
-
19-09-2019 - |
Question
J'ai besoin de recréer un fournisseur dans mon web.fichier de config qui ressemble à quelque chose comme ceci:
<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>
Cependant, je reçois une erreur d'exécution en disant cette assemblée ne peut pas être chargé, et je pense que c'est parce que j'ai du mal PublicKeyToken.Comment puis-je regarder les PublicKeyToken pour mon montage?
Sinon, je vais entièrement la mauvaise direction?
La solution
Utilisation PowerShell , vous pouvez exécuter cette instruction:
([system.reflection.assembly]::loadfile("c:\MyDLL.dll")).FullName
La sortie fournira Version , Culture et PublicKeyToken , comme indiqué ci-dessous:
MyDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a
Autres conseils
Utilisation sn.exe utilitaire:
sn -T YourAssembly.dll
ou le chargement de l'ensemble en réflecteur .
Si vous avez la DLL ajouté à votre projet, vous pouvez ouvrir le fichier csproj et voir l'étiquette de référence.
Exemple:
<Reference Include="System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
sn -T <assembly>
dans la ligne de commande Visual Studio.
Si un ensemble est installé dans le cache d'assemblage global, il est plus facile d'aller à C:\Windows\assembly
et le trouver dans la liste des assemblées GAC.
Sur votre cas, vous pourriez être mixez le nom complet du type de référence d'assemblage, vous pouvez jeter un oeil à MSDN .
La réponse est très simple d'utilisation des outils .NET Framework sn.exe
. Donc, ouvrez l'invite de commandes Visual Studio 2008, puis pointez sur le dossier de la dll que vous voulez obtenir la clé publique,
Utilisez la commande suivante,
sn –T myDLL.dll
Cela vous donnera le jeton de clé publique. Rappelez-vous une chose, cela ne fonctionne que si l'Assemblée doit être fortement signé.
Exemple
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
J'utilise l'Explorateur Windows, accédez à C:\Windows\assembly , trouver celui dont j'ai besoin.À partir des Propriétés vous pouvez copier le PublicKeyToken.
Ce n'est pas basé sur Visual Studio ou les autres services publics, en cours d'installation.
Il suffit d'ajouter plus d'informations, je ne pouvais trouver sn.exe utilité dans les endroits mentionnés, dans mon cas, il était dans C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ bin
Assembly.LoadFile (@ "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.data.dll"). FullName
Entraînera
System.Data, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089
Vous pouvez également vérifier par la méthode suivante.
Aller à exécuter: tapez le chemin de la DLL dont vous avez besoin clé publique. Vous trouverez 2 fichiers: 1. __AssemblyInfo_.ini 2. fichier DLL
Ouvrir ce fichier dans le bloc-notes __AssemblyInfo_.ini, ici vous pouvez voir jeton de clé publique.
Comme @CRice dit que vous pouvez utiliser la méthode ci-dessous pour obtenir une liste de réunion dépendante avec 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;
}
J'utilise généralement comme LINQPad Script vous pouvez l'appeler comme
DependencyInfo("@c:\MyAssembly.dll");
du code