CreateInstanceAndUnwrap在IIEXpress下锁定了dll

时间:2017-08-30 17:47:17

标签: asp.net .net

我有一个执行CreateInstanceAndUnwrap的ASP.NET站点:

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,但这似乎没有帮助。

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

1 个答案:

答案 0 :(得分:2)

我已经有一段时间了,因为我必须处理AppDomain,但我想可能会打电话

AppDomain.Unload(domain)

在相关请求结束时应该释放程序集。如果需要它不断地在内存中(如果每个请求重新加载太昂贵),那么卸载域可能不会为你工作。