【问题标题】:Incorrect behavior of the [ModuleInitializer]?[ModuleInitializer] 的行为不正确?
【发布时间】:2021-06-27 18:32:08
【问题描述】:

我尝试在 .net5 代码中使用 [ModuleInitializer]。我的测试程序集

namespace TestAssembly
{
    public class Class1
    {
        [ModuleInitializer]
        public static void Init()
        {
            Console.WriteLine("ModuleInitializer");
        }
    }
}

我需要在程序集加载时调用 Init() 方法。加载代码

byte[] rawAssembly = LoadFile("TestAssembly.dll");
Assembly.Load(rawAssembly);

但在加载时不会调用初始化程序。我也试过了

Assembly.LoadFrom("TestAssembly.dll");
Assembly.LoadFile("TestAssembly.dll");
AppDomain domain = AppDomain.CurrentDomain;
Assembly assembly = domain.Load(rawAssembly);

初始化器在之后调用

var t = Type.GetType("TestAssembly.Class1, TestAssembly", AssemblyResolver, TypeResolver, false, true);
var obj = Activator.CreateInstance(t);
        

即在第一次使用程序集中的任何类型时。 这是正常行为吗?我可以在程序集加载时调用初始化程序而不需要任何额外的代码吗?

【问题讨论】:

    标签: c# clr clr-module-initializer


    【解决方案1】:

    这里是对github的解释

    模块初始化程序在第一次访问时或之前的某个时间执行 到任何静态字段或第一次调用中定义的任何方法 模块。

    【讨论】:

      【解决方案2】:

      你应该可以通过像这样调用RunModuleConstructor来实现你想要的:

      RuntimeHelpers.RunModuleConstructor( assembly.ManifestModule.ModuleHandle );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-01
        • 2012-12-21
        • 2021-04-25
        • 2014-06-28
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多