Мне нужно получить либо весь код IL, либо декомпилированный исходный код в текстовый файл. Возможно ли это с механизмом декомпиляции ILSpy ICSharpCode.Decompiler?
Возможно, Microsoft ilasm и ildasm могут вам помочь, они могут передавать il в оба конца как текст и сборку как двоичный файл вместе. Вы можете увидеть пример здесь: stackoverflow.com/a/52023423
Да, я изучил ildasm, но я не уверен, должна ли версия ildasm как-то соответствовать версии фреймворка или нет. У меня есть несколько версий ildasm на моей машине. Кроме того, я должен «нести» исполняемый файл ildasm вместе с моей реализацией C#, что добавляет некоторую сложность. Просто казалось, что с ICSharpCode будет намного умнее. Декомпилятор, потому что он поставляется в виде пакета Nuget. Мне нужно выполнить декомпиляцию в пользовательском приложении C#. Основная причина в том, что я хочу сравнить, равны ли две библиотеки DLL или нет... когда управление версиями не применяется..
Я думаю, вы можете использовать github.com/icsharpcode/ILSpy/tree/master/… в качестве вдохновения? (Моя ставка на то, что он использует декомпилятор)





С помощью ILSpy вы можете выбрать узел сборки в дереве, а затем использовать «Файл» > «Сохранить код», чтобы сохранить результат на диск. ILSpy будет использовать для этого текущий выбранный язык, поэтому он может как дизассемблировать, так и декомпилировать. При декомпиляции в C# в диалоговом окне сохранения будут параметры для сохранения проекта C# (.csproj) с отдельными файлами исходного кода для каждого класса; или один файл C# (.cs) для всей сборки.
Для программной декомпиляции используйте библиотеку ICSharpCode.Decompiler (доступна в NuGet).
Например. декомпилировать всю сборку в строку:
var decompiler = new CSharpDecompiler(assemblyFileName, new DecompilerSettings());
string code = decompiler.DecompileWholeModuleAsString();
См. проект ICSharpCode.Декомпилятор.Консоль для немного более продвинутого использования API декомпилятора.
Часть с resolver.AddSearchDirectory(path); в этом консольном проекте может иметь значение, потому что декомпилятору нужно найти сборки, на которые есть ссылки.
Библиотека ICSharpCode.Decompiler также имеет API-интерфейс дизассемблера (более низкоуровневый):
string code;
using (var peFileStream = new FileStream(sourceFileName, FileMode.Open, FileAccess.Read))
using (var peFile = new PEFile(sourceFileName, peFileStream))
using (var writer = new StringWriter()) {
var output = new PlainTextOutput(writer);
ReflectionDisassembler rd = new ReflectionDisassembler(output, CancellationToken.None);
rd.DetectControlStructure = false;
rd.WriteAssemblyReferences(peFile.Metadata);
if (metadata.IsAssembly)
rd.WriteAssemblyHeader(peFile);
output.WriteLine();
rd.WriteModuleHeader(peFile);
output.WriteLine();
rd.WriteModuleContents(peFile);
code = writer.ToString();
}
Это работает на VS-2013? Я пробовал, и это не было совместимо ..
Вы пробовали дотпик? jetbrains.com/декомпилятор