【问题标题】: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; }
        }
    }
    

    【讨论】:

    • 我想我也需要取消订阅该活动,我应该在哪里做呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2011-10-30
    • 1970-01-01
    • 2013-11-25
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多