我有一个执行 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/