2010-11-15 42 views

Répondre

1

Essayer de trouver en chargeant l'ensemble est une proposition de la poule et l'œuf. Si vous n'obtenez pas une exception BadImageFormatException, l'arche est appropriée et vous ne vous souciez plus de ce que c'est. Si vous obtenez l'exception, la configuration du programme est incorrecte. Rien que vous pouvez faire à ce sujet dans le code.

+0

À moins bien sûr que vous utilisez 'ReflectionOnlyLoadFrom'. http://stackoverflow.com/q/9470199/103167 –

9

En supposant que vous ne regardez que les assemblages .net, vous pouvez utiliser CorFlags.exe pour voir l'en-tête de l'image.

This blog post explique l'utilisation pour déterminer comment lire les résultats. Extrait:

Utilisation: Assemblée Corflags.exe [options]

Si aucune option sont spécifiées, sont affichés les drapeaux pour l'image donnée.

...

Voici ce que chaque composant des moyens de tête:

Version: Contient la version de .NET Redist avec laquelle le binaire est construit.

En-tête CLR: 2.0 indique une image .Net 1.0 ou .Net 1.1 (Everett) alors que 2.5 indique une image .Net 2.0 (Whidbey).

CorFlags: C'est calculé par OR'g drapeaux spécifiques pour indiquer si l'image est ILONLY, son bitness etc., et est utilisé par le chargeur. ILONLY: Les images gérées sont autorisées à contenir le code natif . Pour être "anycpu" une image doit seulement contenir IL.

32BIT: Même si vous avez une image qui ne contient que l'IL il pourrait encore avoir des dépendances de plate-forme, le drapeau 32BIT est utilisé pour distinguer « x86 » images à partir d'images « de anycpu ». Les images 64 bits se distinguent par le fait qu'elles ont un PE de type PE32 +.
L'aspect le plus intéressant est le PE et le drapeau 32BIT de l'en-tête. Ils se combinent pour spécifier les types d'assemblage .Voici comment ils regarderaient comme pour:

  • anycpu: PE = PE32 et 32BIT = 0
  • x86: PE = PE32 et 32BIT = 1
  • 64 bits: PE = PE32 + et 32BIT = 0
+0

Quoi de mieux: 1) AssemblyName.ProcessorArchitecture, 2) CorFlags.exe (et Parser C# - Process.Start), 3) ApiChange https: //apichange.codeplex. com/ou 4) PE lecteur http://stackoverflow.com/a/9767750/206730? – Kiquenet

+0

J'installe VS 2008, VS 2010, VS 2012 et VS 2013. J'ai 8 fichiers CorFlags.exe dans les sous-dossiers dans C: \ Program Files (x86) \ Microsoft SDKs \ Windows \. Ce que je devrais utiliser? – Kiquenet