如何解决.net core 3.卸载程序集
我不明白为什么在这种情况下无法卸载
class Program
{
static void Main(string[] args)
{
CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
Assembly assembly = context.LoadFromAssemblyPath(@"C:\Users\Greedy\source\repos\ConsoleApp1\MyApp\bin\Debug\netcoreapp3.1\MyApp.dll");
context.Unload();
GC.Collect();
GC.WaitForPendingFinalizers();
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
Console.WriteLine(asm.GetName().Name);
Console.Read();
}
但是现在上下文上下文已成功卸载。
class Program
{
static void Main(string[] args)
{
CustomAssemblyLoadContext context = new CustomAssemblyLoadContext();
Load(context);
context.Unload();
GC.Collect();
GC.WaitForPendingFinalizers();
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
Console.WriteLine(asm.GetName().Name);
Console.Read();
}
static void Load(CustomAssemblyLoadContext context)
{
Assembly assembly = context.LoadFromAssemblyPath(@"C:\Users\Greedy\source\repos\ConsoleApp1\MyApp\bin\Debug\netcoreapp3.1\MyApp.dll");
}
为什么?以及如何解决第一个示例中的卸载?
解决方法
在我看来,您的assembly
变量持有对您已加载的DLL的引用。
它在第二个示例中有效,因为您已将assembly
声明为方法的局部变量,因此当控制流离开该方法时,该变量将超出范围。
还有其他警告。参见here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。