两个线程 + 不同文件上的调用成员 = 空引用

本文关键字:调用 成员 引用 文件 两个 线程 | 更新日期: 2023-09-27 18:34:25

所以我有 2 个不同的线程:thread1 和 thread2,使用以下方法运行:

public static void thread1()
{
    Assembly asm = Assembly.LoadFrom("t.dll");
    Type t = asm.GetType("dis.Code");
    Object Res = t.InvokeMember("Start", BindingFlags.InvokeMethod, null, null, null);
}
public static void thread2()
{
    Assembly asm = Assembly.LoadFrom("test.dll");
    Type t = asm.GetType("dis.Code");
    Object Res = t.InvokeMember("Start", BindingFlags.InvokeMethod, null, null, null);
}

我想做的是调用 2 个不同的文件"t.dll"和"test.dll"。它们都与包含上述程序的.exe文件位于同一目录中。.dll文件唯一能做的就是一个简单的Console.WriteLine。

所以问题来了:用 1 个或两个线程调用一个文件会导致成功,并将发布 Console.WriteLine 两次。但是,一旦我调用了 2 个不同的文件,每个线程 1 个文件,我最终会在第二次调用中得到一个 NullReferenceException。

这一切都是用 C# 编码的。请帮助:(

两个线程 + 不同文件上的调用成员 = 空引用

可以使用 extern 别名和命名空间别名限定符来加载属于不同程序集但具有相同命名空间的类型。

此处和使用具有相同命名空间的两个 .NET 库对此进行了说明。

也许是问题所在,因为您具有相同的类型名称"dis。代码"在不同的程序集中?当您尝试加载第二个程序集时,它会失败并返回 null