我有一个ASP.NET网站,可以创建InstanceanDunWrap:
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)
在相关请求结束时应释放大会。如果需要连续记忆(如果每个请求重新加载太昂贵),那么卸载域可能对您不起作用。