Отлов CannotUnloadAppDomainException (AppDomain.Unload) - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть приложение, которое использует плагины, которые скомпилированы на лету.Чтобы избежать использования dll, я запускаю его через новый домен приложения следующим образом:

        [System.STAThreadAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public static void Main(string[] args)
        {
            if (AppDomain.CurrentDomain.IsDefaultAppDomain())
            {
                // Loader
                var entryPoint = System.Reflection.Assembly
                    .GetExecutingAssembly();

                var applicationName = entryPoint.GetName().Name;
                // Create the setup for the new domain:
                var setup = new AppDomainSetup();
                setup.ApplicationName = applicationName;
                setup.ShadowCopyFiles = "true"; // note: it isn't a bool

                // Create the application domain. The evidence of this
                // running assembly is used for the new domain:
                AppDomain domain = AppDomain.CreateDomain(
                   applicationName,
                    AppDomain.CurrentDomain.Evidence,
                    setup);

                try
                {
                    // Start MyApplication by executing the assembly:
                    domain.ExecuteAssembly(entryPoint.Location, args);
                    AppDomain.Unload(domain);
                }
                catch
                {

                }
            }
            else
            {
                // Main
                ActualMain(args);
            }
        }

        public static int ActualMain(string[] args)
        {
            MyApp.App app = new MyApp.App();
            app.InitializeComponent();
            app.Run();
            return 0;
        }

Это прекрасно работает, но при закрытии приложения возникает исключение CannotUnloadAppDomainException при вызове AppDomain.Unload (домен).Я ловлю это исключение, но я хотел спросить, нормально ли это или это плохая практика?В моем приложении C # WPF используется нативная DLL-библиотека c ++, которая, как я подозреваю, означает, что выгрузка не работает должным образом.

Спасибо!

...