Che*_*eso 5 asp.net testing appdomain
我想加载ASPNET运行时,运行一个或多个页面,然后卸载它.这是出于测试目的.这不是UI测试; 我真的只是在ASPNET上下文中测试库的使用.
通常这种事情是通过调用来完成的System.Web.Hosting.ApplicationHost.CreateApplicationHost.
这就是我目前的方式:
public class Manager : System.MarshalByRefObject
{
private void HostedDomainHasBeenUnloaded(object source, System.EventArgs e)
{
aspNetHostIsUnloaded.Set();
}
private ManualResetEvent aspNetHostIsUnloaded;
public void Run(string[] pages)
{
bool cleanBin = false;
MyAspNetHost host = null;
try
{
if (!Directory.Exists("bin"))
{
cleanBin = true;
Directory.CreateDirectory("bin");
}
var a = System.Reflection.Assembly.GetExecutingAssembly();
string destfile= Path.Combine("bin", Path.GetFileName(a.Location));
File.Copy(a.Location, destfile, true);
host =
(MyAspNetHost) System.Web.Hosting.ApplicationHost.CreateApplicationHost
( typeof(MyAspNetHost),
"/foo", // virtual dir
System.IO.Directory.GetCurrentDirectory() // physical dir
);
aspNetHostIsUnloaded = new ManualResetEvent(false);
host.GetAppDomain().DomainUnload += this.HostedDomainHasBeenUnloaded;
foreach (string page in pages)
host.ProcessRequest(page);
}
finally
{
// tell the host to unload
if (host!= null)
{
AppDomain.Unload(host.GetAppDomain());
// wait for it to unload
aspNetHostIsUnloaded.WaitOne();
// remove the bin directory
if (cleanBin)
{
Directory.Delete("bin", true);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是自定义ASP.NET主机:
public class MyAspNetHost : System.MarshalByRefObject
{
public void ProcessRequest(string page)
{
var request = new System.Web.Hosting.SimpleWorkerRequest(page, // page being requested
null, // query
System.Console.Out // output
);
System.Web.HttpRuntime.ProcessRequest(request);
}
public AppDomain GetAppDomain()
{
return System.Threading.Thread.GetDomain();
}
}
Run Code Online (Sandbox Code Playgroud)
这没问题.但我想避免创建bin目录,并将程序集复制到其中,如果可能的话.
是否可以使用CreateApplicationHost,并告诉ASPNET从当前目录或任意目录加载程序集,而不是bin?
编辑 ::简化了一下代码. EDIT2 ::我看了womp的答案,但似乎做了很多工作以避免一点点.还有其他想法吗?
这是一个很好的问题。我记得几年前必须处理类似的问题(我想让应用程序主机使用自定义配置文件),并为我用来入门的这篇博客文章添加了书签。
对于您真正想要的东西来说,这可能有点矫枉过正,但也许它可以为您指明正确的方向。
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |