模块初始值设定项是 CLR 的一项功能,在 C# 或 VB.NET 中不直接可用。它们是命名的全局静态方法.cctor
,保证在程序集中的任何其他代码(类型初始值设定项、静态构造函数)执行之前运行。我最近想在一个项目中使用它,并使用 Mono.Cecil 编写了我自己的解决方案(控制台程序/msbuild 任务) ,但我想知道:
有没有办法欺骗 C# 编译器发出模块初始化程序?任何可以使用的属性(例如 CompilerGenerated、SpecialName)或其他诡计?
C# / VB.NET 是否曾经出于某种目的自己发出这些初始化程序?从我所看到的情况来看,托管 C++ 将它们用于某些互操作目的,但我找不到任何关于它们被用于其他目的的引用。有任何想法吗?