In .NET 6.0, I loaded an assembly and invoked its methods and properties using reflection, then tried to delete the assembly file:
    var dllFilePath = @"C:\Users\frank\source\repos\.NET core\MyDll\bin\Debug\net6.0\MyDll.dll";
    var ctx = new AssemblyLoadContext(null, isCollectible: true);
    var assembly = ctx.LoadFromAssemblyPath(dllFilePath);
    var myType = assembly.GetType("MyDll.MyClass");
    var instance = Activator.CreateInstance(myType, new object[] { }, null);
    var myMethod = myType.GetMethod("GetGuidText");
    var res = myMethod.Invoke(instance, new object[] { Guid.NewGuid() });
    ctx.Unload();
    myType = null;
    instance = null;
    myMethod = null;
    ctx = null;
    assembly = null;
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Thread.Sleep(2000);
    GC.Collect();
    GC.WaitForPendingFinalizers();
    File.Delete(dllFilePath);
The attempt to delete threw exception:
System.UnauthorizedAccessException: 'Access to the path 'C:\...\MyDll\bin\Debug\net6.0\MyDll.dll' is denied.'
How do I delete this file without having to restart the app?
 
Aucun commentaire:
Enregistrer un commentaire