Я просмотрел все ресурсы в сети, и я не мог найти ответа!
Я хочу знать, возможно ли переопределить или перекомпилировать функцию в родительском приложении с помощью динамической компиляции с помощью C# CSharpCodeProvider.
Я предоставил простой псевдокод, как показано ниже.
класс Test - это то, что я хочу переопределить или перекомпилировать.
class Test
{
public virtual void Testing1()
{
Console.WriteLine("Method1");
}
}
Что на самом деле я хочу сделать, так это динамически скомпилировать «источник» и переопределить Test.Testing1. Я думаю, что у моей идеи много проблем, пожалуйста, помогите мне.
source= @"
class Test
{
public override void Testing1()
{
Console.WriteLine(""Method2"");
}
}
"
Dictionary<string, string> providerOptions = new Dictionary<string, string>
{
{"CompilerVersion", "v4.0"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false,
};
var assemblies = typeof(Program).Assembly.GetReferencedAssemblies();
var assemblyLocations = assemblies.Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Location).ToList();
assemblyLocations.Add(typeof(Program).Assembly.Location);
compilerParams.ReferencedAssemblies.AddRange(assemblyLocations.ToArray());
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);
В заключение: скажем, если я выполню приведенный ниже код перед динамической компиляцией, результатом будет «Метод 1».
Test test = new Test();
test.Testing1();
и если я выполняю тот же код после компиляции, я хочу получить «Метод 2» в качестве вывода.
Test
, который вы компилируете, не наследуется от исходного классаTest
? - person Llama   schedule 24.01.2019