ASP.NET2.0关于BIN目录下DLL文件访问的问题

自己做一个访问自定义配置文件的类,生成DLL文件,放入网站的BIN目录下。
配置文件与DLL文件在同一目录下,DLL文件通过获取当前加载的模块的地址,来获得配置文件的地址。简单代码如下:
1string strFullPath = Assembly.GetAssembly(Type.GetType(EConfigFile.CLASSTYPE)).Location;

DLL文件编译通过,网站编译也通过后,运行访问页面,却报“System.IO.FileNotFoundException”错,说找不到该配置文件。报错页面返回的提示信息相当奇怪,实际网站BIN目录的路径是“E:\Test\Test\Bin”,但程序提示则需要去“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\test\e8443503\cc9b8b93\assembly\dl3\7a9a259f\40ec21c3_077cc701\”这个路径下去找配置文件,真的是相当奇怪。
2005和2003的差别就是相当的大。

那么这个是为什么呢?有什么办法可以解决没有?
希望能得到大家的解答。我自己也会去找答案的。

Difficulty of making decision lies on what to lose not gain

posted on 2007-04-11 20:10 老四 阅读(2630) 评论(3) 编辑 收藏

评论

#1楼 2007-04-14 10:03 狂图      

一点也不奇怪。你没有指定完整的路径,肯定是去正在运行的页面的目录下查找,你运行的是aspx页面,你认为回去bin下面找吗?

一般我建议是把 所有的配置信息放到App_Data文件夹下,然后程序里要写完整的路径 如:Server.MapPath("/App_Data/you.xml")
 回复 引用 查看   

#2楼[楼主] 2007-04-16 10:55 老四      

To 狂图:
您的解决方案是可行的。
可我的想法是不用去指定路径,而是通过程序在加载DLL文件的时候,自动取到加载的DLL中类的加载路径,得出这个路径后,通过配置文件和DLL文件在同一路径下,从而得到配置文件的路径,进行对配置文件的访问。
差别在于,一个需要指定路径,一个是自动加载的。
以前2003的时候做过,但当时是自动在系统目录下取得文件,也就是c:\windows\system32目录下。现在改进了一下,取DLL的路径,在窗体程序下是可行的,可在2005的web程序下就不行了。
正在找原因。
 回复 引用 查看   

#3楼[楼主] 2007-04-19 13:36 老四      

解决方案已经找到。
首先要明确这样做的目的是什么。原本的意思是,在做数据库访问的时候,NEW一个数据库访问类的时候,做构造函数时,能够不需要传入参数,就能自动在运行目录下读取自定义配置文件里的信息,来建立连接。
在Win程序中,
string strFullPath = Assembly.GetAssembly(Type.GetType(EConfigFile.CLASSTYPE)).Location
这种方式,是可以获得当前载入的DLL的路径的,因此是成功的。
而在Web中,整个程序其实都是被拷贝一份到了.NET的临时目录去运行的,所以采用Win的方法就行不通了。
所以改用了另外一种方法:
string strFullPath = HttpContext.Current.Server.Mappath("~")
这样,就可以获得当前站点的根目录了。这样也就可以读取自定义配置文件了。
 回复 引用 查看   

导航

公告

老四 Counts
关于我

没有头衔,没有荣誉

喜欢写代码

喜欢做架构分析

喜欢追新

喜欢自己坚持的.net 技术方向

logo
IT新闻
昵称:老四
园龄:7年7个月
粉丝:6
关注:36
<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

统计

搜索

 

随笔分类

非本站个人空间

资源站点

积分与排名

最新评论

阅读排行榜

评论排行榜