Можно ли как-то получить из одного класса исходный код другого класса? - C#
Формулировка задачи:
Предположим есть два публичных класса. Один находится в одной части проекта, другой где-нибудь в другой части проекта. Мне для своих каких-то целей из второго класса нужно получить весь исходный код первого класса. Не свойство или метод, а прям исходный код. Есть ли в шарпе какая-нибудь стандартная функция, которая бы мне вернула его исходный код в виде строки или строкового массива? В JavaScript такая была, иногда выручала прям. Может как-то иначе можно добиться этого же результата?
Про обычное чтение cs-файла, в котором расположен данный класс можете не говорить. Я про это знаю, но это на крайний случай! Хотелось бы более изящным способом решить.
Решение задачи: «Можно ли как-то получить из одного класса исходный код другого класса?»
textual
Листинг программы
var sources = ClassBody;
var provider = new CSharpCodeProvider();
var parameters = new CompilerParameters { GenerateInMemory = true };
parameters.ReferencedAssemblies.Add("System.dll");
CompilerResults results = provider.CompileAssemblyFromSource(parameters, sources);
if (results.Errors.Count > 0)
{
string errors = string.Join(Environment.NewLine,
results.Errors.Cast<CompilerError>().Select(x => x.ErrorText));
throw new ArgumentException(errors, "input");
}
var cls = results.CompiledAssembly.GetType("MyClass");
var method = cls.GetMethod("Create", BindingFlags.Static | BindingFlags.Public);
return method.Invoke(null, null);