192 votes

Obtenir le PublicKeyToken des assemblages .Net

Quel est le moyen le plus simple de trouver la clé publique d'un assemblage ?

Le moyen le plus simple auquel je peux penser serait un simple clic droit, obtenir la clé publique, mais cette fonctionnalité n'existe pas, peut-être y a-t-il une extension Visual Studio pour cela ?

J'utilise Visual Studio 2010, si une extension est disponible.

4 votes

Voir ce billet de blog de Kirk Evans sur la façon d'obtenir PublicKeyToken d'un assemblage dans Visual Studio : blogs.msdn.com/b/kaevans/archive/2008/06/18/

2 votes

Je viens d'installer EF6 et honnêtement, je ne sais même pas où se trouvent les assemblages. Ces conneries me prennent des heures de ma journée.

251voto

digEmAll Points 24336

Ouvrez une invite de commande et tapez l'une des lignes suivantes en fonction de votre version de Visual Studio et de l'architecture de votre système d'exploitation :

VS 2008 sur Windows 32bit :

"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

VS 2008 sur Windows 64bit :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

VS 2010 sur Windows 32bit :

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

VS 2010 sur Windows 64bit :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

VS 2012 sur Windows 32bit :

"%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

VS 2012 sur Windows 64bit :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

VS 2015 sur Windows 64bit :

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe" -T <assemblyname>

Notez que pour les versions VS2012+, l'application sn.exe n'est plus dans la corbeille mais dans un sous-dossier. Notez également que pour 64bit vous devez spécifier le dossier (x86).

Si vous préférez utiliser l'invite de commande de Visual Studio, tapez simplement :

sn -T <assembly> 

<assemblyname> est un chemin d'accès complet au fichier d'assemblage qui vous intéresse, entouré de guillemets s'il comporte des espaces.

Vous pouvez l'ajouter comme outil externe dans VS, comme indiqué ici :
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token-for-a-stong-named-assembly.aspx

1 votes

Oui, je le sais, mais je cherche un moyen plus facile, de préférence sans quitter VS.

12 votes

Remplacez %ProgramFiles% par %ProgramFiles(x86)% si vous êtes sur une machine 64 bits.

1 votes

Pour VS2012, c'est sous "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname> . Note sn est rangé dans un niveau de dossier supplémentaire après bin (dans NETFX 4.0 Tools).

109voto

Pravat Maskey Points 4003

Une autre option :

si vous utilisez PowerShell, vous pouvez trouver comme :

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("C:\Program Files (x86)\MySQL\Connector NET 6.6.5\Assemblies\v4.0\MySql.Data.dll")).FullName

comme

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("dll full path")).FullName

et apparaîtra comme

MySql.Data, Version=6.6.5.0, Culture=neutre, PublicKeyToken=c5687fc88969c44d

0 votes

Génial, cela me permet de copier et coller le résultat complet directement dans une configuration web si j'ajoute manuellement des assemblages. Merci !

0 votes

Excellente réponse, car vous pouvez également obtenir la version (ce qui peut être important pour le dépannage).

52voto

user2341923 Points 443

Si la bibliothèque est incluse dans le projet VS, vous pouvez vérifier .cproj par exemple :

<ItemGroup>
    <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...

3 votes

Je ne vois que <Reference Include="System.IdentityModel" /> (idem pour les autres asseblies)

0 votes

Il ne semble pas y avoir beaucoup d'utilité pour les assemblages dans les bibliothèques du système .NET. Par exemple, pour System.Configuration, il est juste dit que <Reference Include="System.Configuration" />

0 votes

Il semble que tous les assemblages ont le même PublicKeyToken alors on regarde dans le .cproj semble être la solution la plus simple.

14voto

apoorv020 Points 1419

Si vous avez inclus l'assemblage dans votre projet, vous pouvez faire :

            var assemblies =
                AppDomain.CurrentDomain.GetAssemblies();

            foreach (var assem in assemblies)
            {
                    Console.WriteLine(assem.FullName);
            }

0 votes

Il n'obtient pas la clé publique des dll dans mes références. Votre méthode permet-elle vraiment d'obtenir toutes les dll dans les références d'un certain projet ? Merci.

0 votes

@FrancisSaul - il ne listera que les assemblages qui ont été CHARGÉS dans la mémoire du processus de votre application ; pour voir les détails d'un assemblage spécifique, exécutez d'abord le code qui fait référence à un certain type dans cet assemblage. Par exemple, créez une nouvelle instance d'une classe de cet assemblage.

1 votes

C'est la méthode la plus simple qui a fonctionné pour moi. Elle peut être encore simplifiée : Exécuter l'application avec un point d'arrêt défini. Lorsque l'exécution s'arrête sur le point d'arrêt, dans la fenêtre immédiate de VS, tapez : AppDomain.CurrentDomain.GetAssemblies() . Cela donnera la liste des assemblages chargés dans la fenêtre immédiate, avec la version, la culture et le PublicKeyToken pour chacun.

5voto

Syd Points 1117

1) La commande est C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}

Dans l'exemple ci-dessus, le SDK de Microsoft réside dans C:\Program Fichiers \Microsoft SDKs \Windows\v6.0A. Votre environnement peut être différent.

2) Pour obtenir le jeton de clé publique de n'importe quel projet, vous pouvez ajouter sn.exe comme faisant partie de vos outils externes dans Visual Studio. Les étapes sont indiquées dans ce lien Microsoft : Comment : Créer un outil pour obtenir la clé publique d'une assemblée

0 votes

Oui, je le sais, mais je cherche un moyen plus facile, de préférence sans quitter VS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X