c# - CSharpCodeProvider 通过动态编译覆盖、重新编译或替换现有函数
问题描述
我查看了网络中的所有资源,但找不到任何答案!
我想知道是否可以使用 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”作为输出。
解决方案
推荐阅读
- r - 在分组小提琴图上绘制各个点
- python - Python 不播放 Omxplayer 视频
- amazon-web-services - AWS Personalize:转储由 PutEvent 创建的用户-项目交互数据集
- javascript - Problem with fetching data from Spring Boot API endpoint using Java Script
- javascript - 寻找解决 ASP.NET 站点中 WEBAPI 样式控制器问题的想法
- arrays - 在 C 中复制包含指针的结构 - 它是如何工作的?
- reactjs - redux-saga TypeError:无法读取未定义的属性“电子邮件”
- android - Flutter:避免跨多个屏幕拉伸壁纸
- python - 尝试在 Windows 上构建自定义 julia 系统映像时出错
- c# - EF6:使用部分更改的存储过程的正确方法,同时使代码中的对象保持最新