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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top