CreateInstanceAndUnwrap在IIEXpress下锁定了dll

use*_*169 10 .net asp.net

我有一个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);
Run Code Online (Sandbox Code Playgroud)

一切正常,但是在我的开发工作站上的IISExpress下运行此代码后,我再也无法重新编译DLL了 - 我得到的错误是"无法复制文件....因为它正被另一个进程使用." 我必须在重新编译之前停止IISExpress.如果在每次部署之前需要停止AppPool,这肯定会成为生产中的一个更大问题.

不确定为什么文件被锁定?我正在使用ShadowCopyFiles和ShadowCopyDirectories,但这似乎没有帮助.

我该怎么做才能避免锁定文件?谢谢.

Kev*_*rst 2

自从我不得不处理 AppDomain 以来已经有一段时间了,但我想也许可以打电话给

AppDomain.Unload(domain)
Run Code Online (Sandbox Code Playgroud)

在相关请求结束时应释放组件。如果需要将其持续保留在内存中(如果每个请求重新加载的成本太高),那么卸载域可能对您不起作用。