我有一个执行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,但这似乎没有帮助。
我该怎么做才能避免锁定文件?谢谢。
答案 0 :(得分:2)
我已经有一段时间了,因为我必须处理AppDomain,但我想可能会打电话
AppDomain.Unload(domain)
在相关请求结束时应该释放程序集。如果需要它不断地在内存中(如果每个请求重新加载太昂贵),那么卸载域可能不会为你工作。