dotNET跨平台 今天 以下文章来源于My IO ,作者My IO dotnet/runtime有一个issue[1]讨论了如何使用 什么是ModuleInitializer?ModuleInitializerAttribute[2]是在.NET5.0中新增加的API。它的作用是应用于编译中的任意数量的静态方法, 标记的方法保证在调用任何其他方法或在整个模块中访问字段之前运行。 针对此属性的方法必须满足下列要求:
Demo创建一个ConsoleApp1项目和ClassLibrary1项目,ConsoleApp1引用ClassLibrary1,目标框架都要选择 .NET 5.0。 代码如下:
运行效果如下图,可以看到ModuleInitializer标记的方法在所有其他方法之前执行了,虽然并没有任何代码显式调用它: 结论实际上,无论是否使用ModuleInitializer,都可以在代码中隐藏恶意代码,只是这种方式隐蔽性会更高一些。 试想一下,存在一大堆类的情况下,即使你反编译了源代码,也不容易注意到隐藏在角落的恶意代码。 最好的解决方案是只使用可信任来源的第3方库。 说实话,个人感觉增加这个特性的意义不大,反而显式初始化更容易控制和理解。 |
|