Garantierter Weg den Dateipfad der Dateien ildasm.exe und ilasm.exe unabhängig von der .NET Version / Umgebung zu finden?

8

Gibt es eine Möglichkeit, den FileInfo / Pfad der ausführbaren Dateien ildasm.exe / ilasm.exe programmgesteuert abzurufen? Ich versuche, eine DLL / EXE-Datei zu dekompilieren und neu zu kompilieren, nachdem ich einige Änderungen daran vorgenommen habe (ich vermute, dass PostSharp etwas Ähnliches tut, um die IL nach der Kompilierung zu ändern).

Ich habe einen Blogeintrag gefunden, der auf Folgendes zeigt:

%Vor%

Wenn ich diesen Code ausführte, existierte das Verzeichnis jedoch nicht (hauptsächlich weil meine SDK-Version 7.1 ist), also ist auf meinem lokalen Rechner der richtige Pfad @"Microsoft SDKs\Windows\v7.1\bin" . Wie kann ich sicherstellen, dass ich die Datei ildasm.exe finden kann?

In ähnlicher Weise habe ich einen anderen Blog-Eintrag gefunden, in dem beschrieben wird, wie man auf ilasm.exe zugreifen kann:

%Vor%

Während dies funktioniert, habe ich bemerkt, dass ich Framework und Framework64 habe, und innerhalb von Framework selbst habe ich alle Versionen bis zu v4.0.30319 (dasselbe mit Framework64). Also, woher weiß ich, welche zu verwenden? Sollte es auf der .NET Framework-Version basieren, die ich anvisiere?

Zusammenfassung:

  • Wie kann ich sicherstellen, dass der richtige Pfad zu ildasm.exe gefunden wird?
  • Wie wähle ich die richtige ilasm.exe zum kompilieren aus?
m-y 28.11.2012, 17:02
quelle

2 Antworten

12

Eine Option wäre, auf Microsoft.Build.Utilities.Core zu verweisen und folgendes zu verwenden:

%Vor%

Im Moment auf meiner Maschine kehrt das zurück:

ildasm = C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\ildasm.exe

ilasm = C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe

    
joshcomley 15.02.2015, 20:28
quelle
6

Ich habe dies kürzlich getan, also habe ich die Interwebs für alle möglichen Pfade des Windows SDK durchsucht und die in der neuesten bekannten Reihenfolge durchsucht. Ich überprüfe auch, ob das Betriebssystem und der Prozess 64bit ist, und verwende dann diese Version, indem ich in den entsprechenden Programmdateien-Ordnern nachschaue. Ich denke nicht, dass die Auswahl von 64-Bit über die 32-Bit-Versionen der Tools eine große Bedeutung hat. Die x86-Version von ILAsm kann problemlos 64-Bit-bevorzugte Assemblys ohne Probleme zusammenstellen, es ist alles IL und führt keinen Code aus.

ILDasm ist Teil des Windows SDK, in dem ILAsm nur das .NET Framework SDK ist. Hier finden Sie einige statische Methoden, um sie zu finden. Der Code ist für .NET 4.0 gebacken, aber Sie könnten einige kleinere Verbesserungen vornehmen, um es auf .NET 2.0 aufzubauen, wenn Sie möchten.

%Vor%

Sie können dies erweitern, indem Sie die gewünschte ausführbare Datei übergeben und Directory.Exists mit File.Exists ebenfalls ändern. Sie könnten auch die möglichen Listen nehmen und sie in eine Konfigurationsdatei einfügen, so dass Sie ohne Neukompilierung mehr hinzufügen können.

    
BrutalDev 08.10.2013 18:20
quelle

Tags und Links