在一解决方案下我分别建立了BLL,DALFactory,IDAL,Model,SQLServerDAL和一个网站项目,这时我用反射和工厂方法模式实现了一个从数据库访问后绑定到datalist的事例,----因为这样每次更改时都要重新更新引用-----所以我把BLL,DALFactory,IDAL,Model,SQLServerDAL这5个项目中的类文件和文件夹本身放到了网站项目的App_Code的文件夹下面------可是在执行的时候报错误如下:
未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。
................ 
行 19:     {
行 20:         string classname = path + ".HotspotNewsSql";//HotspotNewsSql为SQLServerDAL下的一个类
行 21:         return (IHotspotNews)Assembly.Load(path).CreateInstance(classname);
行 22:     }
行 23: }
 源文件: f:\2008062816I\App_Code\DALFactory\HotspotNewsFactory.cs    行: 21 
--------------------------------
我想应该是没有bin文件的原因,找不到文件,
堆栈跟踪: 
[FileNotFoundException: 未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。]
----------------------请问这种情况如何解决呢,小弟初次用反射,请各位指教谢谢!!
webconfig:
--- <appSettings>
    <add key="WebDAL" value="SQLServerDAL" />
    <add key="SQLServer" value="Server=(local);DataBase=[16i];user id=sa;password=sa;"/>
  </appSettings>
-----------------------
DALFactory/HospotNewsFactory.cs:
 private static readonly string path = System.Configuration.ConfigurationManager.AppSettings["WebDAL"];
    public static IHotspotNews CreateHotspotNews()
    {
        string classname = path + ".HotspotNewsSql";
        return (IHotspotNews)Assembly.Load(path).CreateInstance(classname);
    }
 

解决方案 »

  1.   

    ------------------
    是的,我把先前的bin文件引用进来是可以的但是这和第一次做的效果一样啊,还是要分开实现啊 
      

  2.   

    要调用的DLL,生成后要在BIN里能找到.不然如何load啊.
      

  3.   

    放到bin下才能找到相应的程序集啊,Assembly.Load(path)这个得是该项目bin下的
      

  4.   

    web项目中要引用的项目:BLL,DALFactory,IDAL,Model,SQLServerDAL
    看看是不是少了
      

  5.   

    我用发布网站的方式生成了一个名称为:App_Code.dll---路径:
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\new16i\f1efa2b1\836f863d\App_Code.dll--这是我把他添加引用:
    报错如下:(这时App_Code的原文件没有删除)
    编译器错误信息: CS0433: 类型“HotspotNews”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\new16i\8aaaecff\3af30565\App_Code.1sa4hpel.dll”和“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\new16i\8aaaecff\3af30565\assembly\dl3\aa69e582\00b403fd_2fd8c801\App_Code.DLL”中
    源错误:
    行 14:     protected void Page_Load(object sender, EventArgs e)
    行 15:     {
    行 16:         HotspotNews [] hot = (new HotspotNewsBLL()).GetHotspotNewsBLL();//这句报错
    行 17:         DataList1.DataSource = hot;
    行 18:         DataList1.DataBind();
    源文件: f:\NEW16I\Default.aspx.cs    行: 16 
    如果把App_Code的原文件删除:报错同上
    未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。 
    ................ 
    怎么解决啊各位??????????????????????????
      

  6.   

    在vs里面打开“解决方案资源管理器”
    右键点击SQLServerDAL,再点属性,
    查看“应用程序”,看看“程序集名称”和“默认命名空间”是否正确。
    我也遇到过这个问题,就这么解决的。
      

  7.   

     <appSettings> 
        <add key="WebDAL" value="SQLServerDAL.dll" /> 
        <add key="SQLServer" value="Server=(local);DataBase=[16i];user id=sa;password=sa;"/> 
      </appSettings> 
      

  8.   

      <add key="WebDAL" value="SQLServerDAL" /> 检查一下程序集名称和命名空间是否都为“SQLServerDAL”
      

  9.   

    -因为这样每次更改时都要重新更新引用-----所以我把BLL,DALFactory,IDAL,Model,SQLServerDAL这5个项目中的类文件和文件夹本身放到了网站项目的App_Code的文件夹下面------
    ========
    从该 WebSite 添加这些 project 的 Reference,如此 Rebuild 这些project,会更新 dll 至 webSite 的 bin 文件夹其他方式方式包括在 postbuild 事件中添加脚本,将需要的文件 copy 到 website 的目录(此法不建议!)
    可是在执行的时候报错误如下:
    未能加载文件或程序集“SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件。 
    ========
    按你的加载Assembly方法,相关的 dll 需要驻留在 bin 目录中
      

  10.   

    Load是从Bin\Debug中加载的
      

  11.   

    Load是从Bin\Debug中加载的
      

  12.   

    Assembly.Load("App_Code").CreateInstance(className)
      

  13.   

    是要将对应的文件放到Bin文件夹里面,谢谢提醒!!!!!!
      

  14.   

    感谢楼上提示,我也遇到这个问题了。。原来只要把SQLServerDAL这个添加到WebSite下的引用就好了。。