I am attempting to load a dll into a console app and then unload it and delete the file completely. The problem I am having is that the act of loading the dll in its own App
This should be easy enough:
namespace Parent {
public class Constants
{
// adjust
public const string LIB_PATH = @"C:\Collector.dll";
}
public interface ILoader
{
string Execute();
}
public class Loader : MarshalByRefObject, ILoader
{
public string Execute()
{
var assembly = Assembly.LoadFile(Constants.LIB_PATH);
return assembly.FullName;
}
}
class Program
{
static void Main(string[] args)
{
var domain = AppDomain.CreateDomain("child");
var loader = (ILoader)domain.CreateInstanceAndUnwrap(typeof(Loader).Assembly.FullName, typeof(Loader).FullName);
Console.Out.WriteLine(loader.Execute());
AppDomain.Unload(domain);
File.Delete(Constants.LIB_PATH);
}
}
}
OK so I solved my own issue here. Apparently if you call AppDomain.Load it will register it with your parent AppDomain. So simply enough the answer is not to reference it at all. This is the link to a site that shows how to set this up properly.
https://bookie.io/bmark/readable/9503538d6bab80