Re: Не берется новая версия длл
От: vmpire Россия  
Дата: 11.09.18 18:13
Оценка: 2 (1)
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.