asp.net - CreateInstanceAndUnwrap 锁住IIEXpress下的dll

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

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

最佳答案

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

AppDomain.Unload(domain)

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

关于asp.net - CreateInstanceAndUnwrap 锁住IIEXpress下的dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966783/

相关文章:

.net - 使用 P/Invoke 时设置 StringBuilder.Capacity 的正确方法是什么?

c# - 从 C# 项目中的文件夹获取许可证文件

c# - 如何在asp.net页面上显示大约80个字段

asp.net - 将特定文件夹映射到 web.config 中的 HttpHandler

asp.net - 我们如何将数据放在 GridView 的特定行索引上

.net - 查找垃圾收集器上次在 .NET 中运行的时间

c# - 在 C# 中计算耗时时出现夏令时问题

.net - 将Dictionary设置为IList时VB.Net不会引发编译器错误

asp.net - 为什么我在 Web.Release.config XML-Document-Transform 文件中收到所需的属性 'name' is missing 警告?

c# - .NET 控件的最佳开源是什么?