Здравствуйте, e.thrash, Вы писали:
ET>Почему не берется новая версия длл если я подменяю длл после первого прохода.
ET>ET> static void Main(string[] args)
ET> {
ET> int cnt = 0;
ET> while (Console.ReadLine().Length < 3)
ET> {
ET> var appDomain = AppDomain.CreateDomain($"test, cnt");
ET> var assemblyName = new AssemblyName
ET> {
ET> CodeBase = @"d:\SharedDll.dll"
ET> };
ET> Assembly assembly = appDomain.Load(assemblyName);
ET> var theType = assembly.GetType("SharedDll.Class1");
ET> var c = Activator.CreateInstance(theType);
ET> var method = theType.GetMethod("Get");
ET> var retVal = method.Invoke(c, new object[] { });
ET> Console.WriteLine(retVal);
ET> cnt++;
ET> AppDomain.Unload(appDomain);
ET> GC.Collect(); // collects all unused memory
ET> GC.WaitForPendingFinalizers(); // wait until GC has finished its work
ET> GC.Collect();
ET> }
ET> Console.WriteLine("Finish");
ET> Console.ReadLine();
ET> }
ET>
Как только вы вызываете Activator.CreateInstance(theType) сборка загружается в основной домен приложения. Где потом и пребывает.
Новая версия не загружается, так как одновременно в домене может быть только одна версия сборки.
Если хотите загрузить сборку в другой домен, используйте AppDomain.CreateInstanceAndUnwrap