焦作北京网站建设,电商网站的内容设计,wordpress mysql nghix,wordpress plupload_default_params文章转载授权级别#xff1a;CNatasha 是一个代替 Emit / Expression 的动态构建项目#xff0c;旨在为开发者提供方便、快捷、高性能的动态构建服务#xff0c;动态编程是生态的重要组成部分#xff0c;希望开发者们能有足够的兴趣来了解、使用、建设它。1、插件生成使用 … 文章转载授权级别CNatasha 是一个代替 Emit / Expression 的动态构建项目旨在为开发者提供方便、快捷、高性能的动态构建服务动态编程是生态的重要组成部分希望开发者们能有足够的兴趣来了解、使用、建设它。1、插件生成使用 Natasha 进行动态编译并生成 dll 和 pdb 文件//使用随机域
//参数传 true 将内容编译到 DLL 中
NDomain.Random(true).Action(Console.WriteLine(\Hello World!\););
2、插件加载前提插件结构Plugin 引用了 Dependency.dll 和 MySql.Data.dll.NET Core 2.x 使用 Natasha 加载插件建议手动添加依赖。var domain DomainManagement.Random;
domain.LoadStream(Plugin.dll);
domain.LoadStream(Dependency.dll);
domain.LoadStream(MySql.Data.dll);NDomain.Create(domain).Action(xxxx);
.NET Core3.x 官方在 core3.x 后提供了 AssemblyDependencyResolver 操作类来解析 deps.json 依赖配置文件因此不需要再一个一个的添加了。AssemblyDependencyResolver 操作类仅对外提供两个解析路径的方法若需要获取引用文件的路径需要反射私有字段。var domain DomainManagement.Random;
domain.LoadStream(Plugin.dll);NDomain.Create(domain).Action(xxxx);3、运行时动态修改插件在群里小伙伴的建议下开了一个动态修改插件的项目https://github.com/night-moon-studio/DynamicPlugin 结合 Natasha 出色的正编译及插件功能 和 ILSpy 超强的反编译功能我们允许一个插件在运行时加载之后进行部分修改并重新编译。场景前提插件 Plugin 包含有 A \ B \ C 三个类, 需求是在不改变类 A \ B 的情况下修改 C 的代码并重新生成插件中间不能关闭程序。//当插件使用deps.json依赖文件时
ReWriter reWriter new ReWriter(dllPath);
reWriter[C] using xxxx; namespace xxx{public class C{ ...... }};
reWriter.Complier();
reWriter.Dispose();
return reWriter.NewDllPath;
//当插件不适用deps.json文件且所有依赖文件都在同一目录时
ReWriter reWriter new ReWriter(dllPath,false);
//添加额外引用DLL
reWriter.References.Add(MySql.Data.dll);
reWriter.References.Add(xxxx.dll);
reWriter[C] using xxxx; namespace xxx{public class C{ ...... }};
reWriter.Complier();
reWriter.Dispose();
return reWriter.NewDllPath;
Github 代码中的例子结果对比图对新旧 dll 反编译查看下为新可以发现 Natasha 在生成插件的同时对编译代码还进行了优化。对其他类进行对比查看虽然反编译里软件中显示了乱码实际上在运行时得到的结果并没有乱码得益于 ILSpy 对 dynamic 的反解。4、结尾不太会说废话但唐突的结束不是很好希望大家能多多吐槽我们的项目多提建议如果没什么问题就去干吧干就完了.https://github.com/dotnetcore打赏一杯酒削减三分愁。跟着我们走脱发包你有。组织打赏账户为柠檬的账户请标注「NCC」并留下您的名字以下地址可查看收支明细https://github.com/dotnetcore/Home/blob/master/Statement-of-Income-and-Expense.mdOpenNCC专注.NET技术的公众号https://www.dotnetcore.xyz微信IDOpenNCC长按左侧二维码关注欢迎打赏组织给予我们更多的支持