예제 #1
0
        internal void DomainDisposed()
        {
            lock (m_locker)
            {
                if (m_disposed)
                {
                    return;
                }
                else
                {
                    m_disposed = true;
                }

                m_externalAsmWrapper = null;
                Domain        = null;
                LoadException = null;
                LastEx        = null;
                AssemblyName  = null;
                FileInfo      = null;
                m_disposed    = true;
            }

            //на случай если сборка была "потеряна и забыта"
            //и методы был вызван из деструктора
            //уведомляем домен, что сборка освобождена
            //вдруг он ещё есть :)
            try
            {
                UnLoaded?.Invoke(this);
            }
            catch { }
        }
예제 #2
0
 /// <summary>
 /// Логика освобождения ресурсов
 /// </summary>
 public void Dispose()
 {
     try
     {
         /*
          * даём знать, что юзер захотел "освободить сборку"
          *
          * поскольку фактически сборки из домена выгружать нельзя,
          * то реальный Dispose имеет смысл только при выгрузке домена
          * поэтому решение о нём принимаем на стороне домена,
          * а здесь лишь уведомляем, что она условно "выгружена"
          */
         UnLoaded?.Invoke(this);
     }
     catch (Exception ex)
     {
         if (Utilites.m_loger != null) //проверяем, т.к. возможен вызов через деструктор
         {
             Utilites.m_loger.Log("Возникло исключение при освобождении ресурсов SeparatedAssembly", ex
                                  , new LogParameter("Имя файла сборки", GetAssemblyFileName()));
         }
     }
 }