最近弄了brinkster的空间 发现上传了编译好的网站之后说找不到程集 提示为"xxx.dll"未编译 弄了N久还是没找到原因..后来在本机上测试 我将一个网站放到wwwroot下 未给它建立虚拟目录 直接在IIS中浏览 发现和空间上的错误一模一样..才知道上传上的网站没建立虚拟目录 但网站又不允许我建立虚拟目录..一时之间没辙了 想了老半天 发现这个空间不支持代码隐藏 只有使用单页面的aspx了 怎么办 我的很多代码都封装成了类放在app_code文件夹中 在单页面的aspx中根本无法访问..急了 一个网站 要我重新再做一份但页面的..我晕...想来想去也没别的办法...就慢慢的开始做单页面的 还好 前天代码都一样 只要copy就行了 可后台cs中的怎么办 我又不能使一些公共的方法在每个页面中都可以调用 在这个页面中写了 在另一个页面中照样要写...这么大的工作量 而且我的数据库操作都写在了类里面了..无语了..沉默了...哎 程序员就是命苦啊..敲过了的代码还要敲 而且将类中的方法都放到aspx里面 aspx显得混乱 而且文件很大...左思右想 还是没结果..有人说去继承System.Web.UI.Page类 可aspx单页面怎么继承啊..于是我继续想啊想的..看到页面中的Import这个处理指令 于是我就开始将类封装成dll了..到页面中去引用dll 可私有的dll没有bin目录 在aspx中始终引用不到.突然 我想到了以前看过的反射..对 用反射 就它了 于是..我就找反射的资料..去动态调用dll中的方法..我将所有的数据库查询的方法都链到了dll中..再通过反射去调用其中的方法.哈哈 问题就这么解决了.. 在使用反射的过程中也遇到了些麻烦..但总的方向有了..也就一一解决了..
反射引用命名空间System.Reflection.............
Assembly assembly=Assembly.LoadFrom("xxx.dll");
Type[] tt=assembly.GetTypes();
foreach(Type t in tt)
{
if(t.FullName=="DataBase.Connection")
{
object o=Activator.CreateInstance(t);
MethodInfo m=t.GetMethod("MethodName");
object[] parm=new object[]{};//参数
object result=m.Invoke(o,parm);
return result;//就实现了动态调用dll中的方法
}
}
我把dll文件放在单独的一个文件夹中...这样减少了前台的代码 也可以实现公用 也在一定程度上防止了前台代码的逻辑混乱..
休息 休息....问题解决了 ..哈哈哈哈哈哈