标签:
也许有的朋友工作多年,积累了很多的开发经验,形成了自己的一套框架,但是又不想公开给用户,于是封装成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")); } }
标签:
原文地址:http://www.cnblogs.com/pinhao/p/4246146.html