码迷,mamicode.com
首页 > 其他好文 > 详细

调用内嵌Dll框架的一个例子

时间:2015-01-24 18:40:50      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

       也许有的朋友工作多年,积累了很多的开发经验,形成了自己的一套框架,但是又不想公开给用户,于是封装成Dll后,混淆了,加密了(没有打乱命名空间和类名、方法名),把框架DLL内嵌进资源里面,可以正常引用、调用.........

      废话少说,如下:

      首先封装一个Dll,ClassLibrary1.dll

namespace ClassLibrary1
{
    public class Test
    {
        public static string Say()
        {
            return "11111";
        }
    }
}

然后把这个Dll放到项目里,设置为内嵌
技术分享

然后引用这个DLL技术分享

 

然后新建一个页面,调用这个方法

using System;
namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            Response.Write(ClassLibrary1.Test.Say());

        }

    }
}

现在,需要在程序启动的时候就要加载这个程序集,读取资源释放Dll出来,程序启动就释放,用完就删除,用到了全局Global

Application_Start

Application_End

 

 protected void Application_Start(object sender, EventArgs e)
        {
            LoadDll("WebApplication1.ClassLibrary1.dll", "bin/ClassLibrary1.dll");
        }


public static void LoadDll(string dllFullName, string filePath)
        {
            try
            {
                // 尝试读取资源中的 DLL 
                Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream(dllFullName);
                byte[] bs = new byte[sm.Length];
                sm.Read(bs, 0, (int)sm.Length);
                sm.Close();
                //================================================================================================================
                if (sm == null && !File.Exists(HttpContext.Current.Server.MapPath(filePath)))//资源及硬盘都不存在这个Dll
                {
                    throw (new Exception(" 找不到文件 :" + Path.GetFileName(HttpContext.Current.Server.MapPath(filePath))));
                }
                else if (File.Exists(HttpContext.Current.Server.MapPath(filePath)))
                {
                    return;
                }
                FileStream fs2 = new FileStream(HttpContext.Current.Server.MapPath(filePath), FileMode.Create, System.IO.FileAccess.Write);
                fs2.Write(bs, 0, bs.Length);
                fs2.Close();
            }
            catch { return; }
        }


 protected void Application_End(object sender, EventArgs e)
        {
           if(File.Exists(HttpContext.Current.Server.MapPath("bin/ClassLibrary1.dll")))
           {
               File.Delete(HttpContext.Current.Server.MapPath("bin/ClassLibrary1.dll"));
           }
        }

 

调用内嵌Dll框架的一个例子

标签:

原文地址:http://www.cnblogs.com/pinhao/p/4246146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!