我有一个 .net 库 dll,它就像一个功能库。有一堆静态类型和静态方法。
我需要运行一些初始化代码来设置库以供使用。
当程序集被加载时,有没有办法确保运行特定的方法?类似于 AppDomain.AssemblyLoad 但从程序集本身自动调用的东西。我在想也许可以使用类似 AssemblyAttribute 的东西?
目前我在静态构造函数中有这个初始化代码,但由于这是一个有很多入口点的库,所以不能保证会使用这个特定类型。
谢谢!
最佳答案
是的,有点。
使用 Einar Egilsson 的优秀小实用程序,InjectModuleInitializer .
将此可执行文件作为构建后步骤运行,以创建一个小的 .cctor 函数(模块初始化函数),该函数调用您的不带参数的静态 void 函数。如果编译器给我们创建 .cctor() 的能力就好了,幸运的是我们很少需要这种能力。
但是,这并不是 DllMain 的完整替代品。 CLR 仅在程序集中调用任何方法之前调用此 .cctor 函数,而不是在程序集加载时。因此,如果您需要在程序集加载时发生某些事情,您需要让加载代码直接调用方法或使用我详述的 hack https://stackoverflow.com/a/9745422/240845
关于c# - 在程序集加载时初始化库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459560/