Подтвердить что ты не робот

CreateInstanceAndUnwrap блокирует DLL в файле IIEXpress

У меня есть сайт ASP.NET, который создает CreateInstanceAndUnwrap:

var setup = new AppDomainSetup
        {
            ShadowCopyFiles = "true",
            ShadowCopyDirectories = "true",
            ApplicationBase = textPipe["host"] == "web" ? Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath) : Environment.CurrentDirectory,
            ConfigurationFile = $"UnitTests/{testProject}/app.config"
        };

        var domain = AppDomain.CreateDomain("UnitTestDomain", null, setup);

        var type = typeof(TestProxy);
        var instance = (TestProxy)domain.CreateInstanceAndUnwrap(
            type.Assembly.FullName,
            type.FullName);

Все работает, но после запуска этого кода под IISExpress на моей рабочей станции dev я больше не могу перекомпилировать библиотеки DLL - ошибка, которую я получаю, - "Невозможно скопировать файл... потому что он используется другим процессом". Я должен остановить IISExpress перед перекомпиляцией. Это определенно будет большой проблемой в производстве, если будет необходимо остановить AppPool до каждого развертывания.

Не знаете, почему файлы заблокированы? Я использую ShadowCopyFiles и ShadowCopyDirectories, но это, похоже, не помогает.

Что я могу сделать, чтобы избежать блокировки файлов? Спасибо.

4b9b3361

Ответ 1

Прошло некоторое время с тех пор, как мне пришлось иметь дело с AppDomain, но я думаю, может быть, позвонив

AppDomain.Unload(domain)

в конце соответствующего запроса следует освободить сборку. Если есть необходимость, чтобы он постоянно находился в памяти (если это слишком дорого для перезагрузки на запрос), то выгрузка домена, вероятно, не сработает для вас.