公告告诉我们:
程序集可卸载性是 AssemblyLoadContext 的一项新功能。从 API 的角度来看,这项新功能在很大程度上是透明的,仅通过几个新 API 即可公开。它可以卸载加载程序上下文,释放实例化类型、静态字段和程序集本身的所有内存。应用程序应该能够通过这种机制永远加载和卸载程序集,而不会发生内存泄漏。
此外,该设计说明还提到了“静力学”。
我试过这个简单的测试:
static void Main()
{
Proxy.X = 15;
var alc = new AssemblyLoadContext("MyTest", true);
var asm = alc.LoadFromAssemblyName(typeof(Program).Assembly.GetName());
var proxy = (Proxy)asm.CreateInstance(typeof(Proxy).FullName);
Console.WriteLine(proxy.Increment());
}
class Proxy
{
public static int X;
public int Increment() => ++X;
}
它输出“16”,表示隔离不起作用。
我的目标是对可以抛出异常的类静态成员进行单元测试。通常的测试可以通过触发类型初始化器来影响彼此的行为,所以我需要以最便宜的方式隔离它们。测试应在 .NET Core 3.0 上运行。
这是正确的方法吗,可以AssemblyLoadContext
帮忙吗?