使用嵌入式资源将dll嵌入到HttpHandler中

本文关键字:HttpHandler dll 嵌入式 资源 | 更新日期: 2023-09-27 18:21:56

我想将depencency dll嵌入到我的HttpHandler dll中以便于部署,所以我想将其作为嵌入式资源添加到解决方案中,并使用AppDomain.CurrentDomain.AssemblyResolve事件来解决它。
问题是,如果我在void ProcessRequest(HttpContext context)方法中订阅了事件,那么它在到达事件订阅之前似乎无法解决
所以问题是我应该在哪里订阅该事件,以便能够从嵌入式资源加载dll。

使用嵌入式资源将dll嵌入到HttpHandler中

您可以使用处理程序的静态构造函数。例如:

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; }
    }
}