No. Однако, ILSpy может.
Основываясь на комментариях к вопросу и о том, что я понимаю о Roslyn, декомпиляция не поддерживается. Однако, благодаря @ Брэдлите ILSpy наконечника, есть решение:
- Скачать ILSpy двоичных файлов из http://ilspy.net/
- справочного следующих узлов: ICSharpCode.Decompiler.dll, ILSpy.exe, Mono.Cecil.dll, ILSpy.BamlDecompiler.Plugin.dll
- Реализовать «.ToSourceCode()» метод расширения, как показано ниже:
using System;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using ICSharpCode.Decompiler;
using ICSharpCode.ILSpy;
using Mono.Cecil;
class Foo { }
class Program
{
static string classSourceCode = "using System; internal class Foo { } ";
static void Main()
{
var instance = new Foo();
var instanceSourceCode = instance.GetType().ToSourceCode();
System.Diagnostics.Debug.Assert(instanceSourceCode == classSourceCode);
}
}
static class TypeExtensions
{
public static string ToSourceCode(this Type source)
{
var assembly = AssemblyDefinition.ReadAssembly(Assembly.GetExecutingAssembly().Location);
var type = assembly.MainModule.Types.FirstOrDefault(t => t.FullName == source.FullName);
if (type == null) return string.Empty;
var plainTextOutput = new PlainTextOutput();
var decompiler = new CSharpLanguage();
decompiler.DecompileType(type, plainTextOutput, new DecompilationOptions());
return Regex.Replace(Regex.Replace(plainTextOutput.ToString(), @"\n|\r", " "), @"\s+", " ");
}
}
не взглянули на Rslyn, но если это возможно, то взлом ANY. чистая программа было бы всего лишь 5 минут ... – Gusman
Да, вы, безусловно, можете написать такой метод. Он не встроен в Рослин, и в Рослине мало что поможет вам в этом. – usr
Да или нет, вопросы задают проблемы с переполнением стека. Какие исследования вы сделали о возможностях Рослина? Что вы пробовали, что не удалось, и какие ошибки вы получаете, которые отличаются от ожидаемого поведения. –