C# 启动期间自动在引用的程序集上运行代码??这叫什么?

C# 启动期间自动在引用的程序集上运行代码??这叫什么?,c#,asp.net,.net,C#,Asp.net,.net,在.NET中,有一种东西可以在加载程序集时自动在引用的程序集中运行一段代码 例如,您可以使用一种属性装饰一个类,该属性位于projectfoo(类库)中。ProjectBar(一个Web应用程序)只是引用ProjectFoo。加载Bar时,Foo中的修饰代码会以某种方式运行。我相信这是一个较新的功能 有人能说出这个功能叫什么吗 更新:谢谢湿婆!不是模块初始化。虽然这让我找到了正确的答案。谢谢大家 您是指模块初始值设定项吗?它们能够完成您描述的事情,但在C#中似乎不支持它们。它们是CLR的一部分是

在.NET中,有一种东西可以在加载程序集时自动在引用的程序集中运行一段代码

例如,您可以使用一种属性装饰一个类,该属性位于projectfoo(类库)中。ProjectBar(一个Web应用程序)只是引用ProjectFoo。加载Bar时,Foo中的修饰代码会以某种方式运行。我相信这是一个较新的功能

有人能说出这个功能叫什么吗


更新:谢谢湿婆!不是模块初始化。虽然这让我找到了正确的答案。谢谢大家

您是指模块初始值设定项吗?它们能够完成您描述的事情,但在C#中似乎不支持它们。它们是CLR的一部分是的,但不是C语言本身的一部分

与进一步信息和研究的一些链接:


-感谢J.指出此链接如果我没有错,那么您正在寻找“模块初始值设定项”。
检查一下你在找什么?

你可能也已经看过了。Fody是“编织.net程序集的可扩展工具”,您可以将其作为nuget包安装。fody有一个名为的外接程序。在前面提到的其他答案中,它在引擎盖下使用了,但去掉了丰满

从文件中:

它的作用是: 在目标程序集中查找名为
ModuleInitializer
的类,其形式如下:

public static class ModuleInitializer
{
    public static void Initialize()
    {
        //Init code
    }
}
然后将以下代码注入目标程序集的模块初始值设定项中。当程序集加载到内存中时,将调用此代码

static <Module>()
{
    ModuleInitializer.Initialize();
}
static()
{
ModuleInitializer.Initialize();
}

原来是我在找的!谢谢大家

你认为这种特征是如何存在的?有参考资料吗?这就是我想弄明白的。在过去的一年里,我曾两次遇到过它,觉得它真的很酷。现在就我的生活而言,我无法回忆或谷歌这个。但你确定这个存在吗?我不这么认为(至少在c#中)。我以前做过一些研究。无法获取任何内容。请小心-这可能会导致加载程序锁出现问题。我认为这可能是它没有得到广泛支持的部分原因。您最好编写一些简单的反射代码来查找具有属性的类,并在与nunit框架类似的模型中实例化该类,你可能想把它添加为一个答案,这样我们就可以投票支持它。这基本上是Hans的答案:原来我在寻找预应用程序启动方法!谢谢你!原来我在找预应用程序启动方法!谢谢你!原来我在找预应用程序启动方法!谢谢你!原来我在找预应用程序启动方法!谢谢你!如果这是针对ASP.NET的,那么我建议您在问题中添加适当的标记和一些文本。这将帮助谷歌找到这个页面(我相信是这样的)。上面的PreApplicationStartMethod链接不再存在。然而,一个简单的谷歌搜索将产生一些好的结果。