CreateInStanceAndunWrap在IIEXPRESS下锁定DLL



我有一个ASP.NET网站,可以创建InstanceanDunWrap:

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下运行此代码后,我无法再重新编译DLL-我遇到的错误是"无法复制文件....因为它是由另一个进程使用的。。"重新编译之前,我必须停止Iisexpress。如果有必要在每次部署之前停止AppPool,这绝对是一个更大的问题。

不确定为什么文件被锁定?我正在使用Shadowcopyfiles和ShadowcopyDirectories,但这似乎无济于事。

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

已经有一段时间了,因为我不得不处理AppDomain,但我认为可以打电话

AppDomain.Unload(domain)

在相关请求结束时应释放大会。如果需要连续记忆(如果每个请求重新加载太昂贵),那么卸载域可能对您不起作用。

最新更新