c# - 在程序集加载时初始化库

标签 c# .net assemblies

我有一个 .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/

相关文章:

.net - 生成 LINQ to DB2?

.net - 无法获取 .flv 文件的正确 mime 类型

c# - 并非所有程序集都从 bin 文件夹加载到 AppDomain

c# - 仅在填充后重新排序 TreeView 节点 [0]

c# - C#中的声音数组

c# - 对于从 IEnumerable<T> 继承的 .Net 类,为什么 GetEnumerator 在 COM 中不可见?

svn - 在网站项目(VS2005)中添加程序集引用并将其存储在 subversion 中

java - Maven 程序集 :assembly

C# JSON 解析与子字符串

c# - 如何在 Visual Studio 中(重新)启用实时 CSS 编辑?