Garanti de trouver le chemin de la ildasm.exe et ilasm.exe fichiers peu importe .Version NET/environnement?

Est-il possible d'obtenir par programme les FileInfo/Chemin de la ildasm.exe/ilasm.exe des exécutables? Je suis tenter de décompiler et recompiler un dll/exe fichier de façon appropriée après avoir fait quelques modifications pour elle (je suppose PostSharp fait quelque chose de similaire à modifier la IL après la compilation).

J'ai trouvé un post de blog qui a souligné:

var pfDir = Environment.GetFolderPath(Environment.SpecialFolders.ProgramFiles));
var sdkDir = Path.Combine(pfDir, @"Microsoft SDKs\Windows\v6.0A\bin");

...

Cependant, quand j'ai couru ce code, le répertoire n'existe pas (principalement parce que mon SDK version 7.1), sur ma machine locale le chemin d'accès correct est @"Microsoft SDKs\Windows\v7.1\bin". Comment puis-je m'assurer que je peux effectivement trouver la ildasm.exe?

De même, j'ai trouvé un autre blog sur la façon d'obtenir l'accès à ilasm.exe comme:

string windows = Environment.GetFolderPath(Environment.SpecialFolder.System);
string fwork = Path.Combine(windows, @"..\Microsoft.NET\Framework\v2.0.50727");

...

Alors que cela fonctionne, j'ai remarqué que j'ai Framework et Framework64, et dans le Cadre lui-même, j'ai toutes les versions jusqu'à la v4.0.30319 (même avec Framework64). Alors, comment puis-je savoir lequel utiliser? Devrait-il être basé sur la .NET Framework version je suis ciblage?

Résumé:

  • Comment correctement vous garantissons de trouver le chemin d'accès correct à ildasm.exe?
  • Comment bien sélectionner le bon ilasm.exe pour compiler?
Il n'est pas aussi simple que cela, différentes versions de VS ont différentes façons de localiser le répertoire du SDK. C'est en définitive le lire à partir du registre HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows clé. VS2008 utilise le CurrentInstallFolder valeur, VS2010 et VS2012 utiliser les sous-clés directement. Ce terme définit l' %WindowsSdkDir% variable d'environnement, mais il n'est pas clair dans ce contexte que votre code s'exécute.
C'est assez décourageant d'entendre qu'il n'y a pas une manière spécifique pour l'accès ildasm.exe. Quel est le ilasm.exe fichier? Si je fais la supposition de VS2012?

OriginalL'auteur m-y | 2012-11-28