我尝试在 .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);
即第一次使用程序集中的任何类型。这是正常行为吗?我可以在没有任何附加代码的程序集加载的情况下实现对初始化程序的调用吗?