【问题标题】:Embedding dll into HttpHandler using embedded resources使用嵌入式资源将 dll 嵌入到 HttpHandler 中
【发布时间】:2012-01-30 10:24:48
【问题描述】:
我想将依赖 dll 嵌入到我的 HttpHandler dll 中以便于部署,所以我想将其作为嵌入式资源添加到解决方案中并使用AppDomain.CurrentDomain.AssemblyResolve 事件来解决它。
问题是,如果我在 void ProcessRequest(HttpContext context) 方法中订阅事件,看起来它在到达事件订阅之前无法解决。
所以问题是我应该在哪里订阅该事件,以便能够从嵌入式资源加载 dll。
【问题讨论】:
标签:
c#
asp.net
asp.net-mvc
httphandler
ihttphandler
【解决方案1】:
您可以使用处理程序的静态构造函数。例如:
public class Handler1: IHttpHandler
{
static Handler1()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, e) =>
{
if (string.Equals(e.Name, "ClassLibrary1", StringComparison.OrdinalIgnoreCase))
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Handler.ClassLibrary1.dll"))
{
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
return Assembly.Load(buffer);
}
}
return null;
};
}
public void ProcessRequest(HttpContext context)
{
var mtd = Type.GetType("ClassLibrary1.Class1, ClassLibrary1").GetMethod("Hello", BindingFlags.Static | BindingFlags.Public);
var result = (string)mtd.Invoke(null, null);
context.Response.ContentType = "text/plain";
context.Response.Write(result);
}
public bool IsReusable
{
get { return true; }
}
}