代码改变世界

命名空间+反射:未能加载文件或程序集“database.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件..

  沐海  阅读(3452)  评论(0编辑  收藏  举报
public static object CreateObject(string AssemblyPath,string ClassNamespace)
    {
        object objType = DataCache.GetCache(ClassNamespace);//从缓存读取
        if (objType == null)
        {
            try
            {
                objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
                DataCache.SetCache(ClassNamespace, objType);// 写入缓存
            }
            catch
            {}
        }
        return objType;
    }
在反射创建实例的时候。提示  ------------------未能加载文件或程序集“database.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件..

在项目中。AssemblyPath 加载的位置 是 database.SQLServerDAL。而如果只是简单的创建了类库之后,它默认的命名空间不带有databse.  所以还要再设置项目属性的命名空间为databse.SQLServerDAL.而且。所有在database中的项目。例如 BLL. IDAL.SQLServerDAL.Model 等也必须加上database.

为什么要写database吗那?

               

首先:我们在动软生成三层的时候,定义的命名空间是database;那么命名空间和项目中文件夹的关系那?我来描述一下。database是我们在动软中添加的。我们把这些项目放在database(解决方案里的我们建立的一个文件夹)下。而utility文件夹下的DBUtility类的命名空间就是DBUtility并不是 utility.DBUtility.正在这里可以看出。命名空间和文件夹的名称并不是一定有对应关系。但: 例如 Web项目下的Default.aspx.cs文件。它的命名空间就是Web.   这里就可以看到。项目生成时,怎么分辨所有的类的引用那?根据其命名空间。所有就把文件夹路径引入到命名空间。因为文件夹路径首先是唯一的,其实可以保证我们可以很快的找到它(以文件夹的形式)。那么。在这里。动软既然已经添加其命名空间。只有两种方法:1.CS文件中。把namespace 修改。去掉 database<img src="https://pic002.cnblogs.com/images/2011/146292/2011052609440062.jpg">2.针对项目---属性----命名空间。添加上 database(如果已经引用很多的话。建议使用这种方式)------------------------------------------------------------------------------------------------------------------------------命名空间和程序集<div class="content"><pre class="reply-text mb10">命名空间:
就像你硬盘里的文件夹, 不同的文件夹下存放不同的文件(类),这样就可以避免文件全部堆在一个地方引起混乱(同理, 这样你就可以为不同的模块建立命名空间,这样就可以使类和容易管理), 并且可以避免多个同名文件无法放在一个文件夹下。
 
程序集:
.NET编写的DLL和EXE就是程序集。 程序集包括:
   1、程序集清单,包含程序集元数据。
   2、类型元数据。
   3、实现这些类型的 Microsoft 中间语言 (MSIL) 代码。
   4、资源集。
 
所以这两个概念其实是不同的东西,没有什么联系。
只是一般建立类库项目(DLL)的时候会用默认的命名空间来命名程序集文件,这样很容易使人把这两个东西联系起来。</pre>
</div>
命名空间:
就像你硬盘里的文件夹, 不同的文件夹下存放不同的文件(类),这样就可以避免文件全部堆在一个地方引起混乱(同理, 这样你就可以为不同的模块建立命名空间,这样就可以使类和容易管理), 并且可以避免多个同名文件无法放在一个文件夹下。
 
程序集:
.NET编写的DLL和EXE就是程序集。 程序集包括:
   1、程序集清单,包含程序集元数据。
   2、类型元数据。
   3、实现这些类型的 Microsoft 中间语言 (MSIL) 代码。
   4、资源集。
 
所以这两个概念其实是不同的东西,没有什么联系。
只是一般建立类库项目(DLL)的时候会用默认的命名空间来命名程序集文件,这样很容易使人把这两个东西联系起来。----------------------------------------------------------------------------------------------------------------------------------------
<appSettings>
       <!--<add key="DAL" value="database.SQLServerDAL"/> 如果值为database的命名空间,则必须在 SQLServerDAL中命名空间加上 database-->
       <add key="DAL" value="database.SQLServerDAL"/>
       <add key="connStr" value="server=server;database=WaterMananger;uid=sa;pwd=123123"/>
   </appSettings>

     

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
记录生活、工作、学习点滴!
E-Mail:mahaisong@hotmail.com 欢迎大家讨论。
沐海博客园,我有一颗,卓越的心!
点击右上角即可分享
微信分享提示