我有一个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,但这似乎没有帮助.
我该怎么做才能避免锁定文件?谢谢.
自从我不得不处理 AppDomain 以来已经有一段时间了,但我想也许可以打电话给
AppDomain.Unload(domain)
Run Code Online (Sandbox Code Playgroud)
在相关请求结束时应释放组件。如果需要将其持续保留在内存中(如果每个请求重新加载的成本太高),那么卸载域可能对您不起作用。
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |