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

	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
2.针对项目---属性----命名空间。添加上 database(如果已经引用很多的话。建议使用这种方式)
------------------------------------------------------------------------------------------------------------------------------
命名空间和程序集
命名空间:
就像你硬盘里的文件夹, 不同的文件夹下存放不同的文件(类),这样就可以避免文件全部堆在一个地方引起混乱(同理, 这样你就可以为不同的模块建立命名空间,这样就可以使类和容易管理), 并且可以避免多个同名文件无法放在一个文件夹下。

程序集:
.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>

     

原文地址:https://www.cnblogs.com/mahaisong/p/2057826.html