这个错误是我在打包的时候。发现的,由于我移动了我的project的位置(从C盘移动到了D盘),看一下出错的代码:

    Dim strDB As String = System.Configuration.ConfigurationSettings.AppSettings("DBUser")    '这里改动配置文件就能够确定是查询那个表了。
    '/// <summary>
    '/// depiction:<实例化一个DAL中的User表的类>
    '/// </summary>
    '/// <param name="<參数名称>"><參数说明></param>
    '/// <returns>
    '///<返回值是一个boolean值>
    '/// </returns>
    Public Function CreateUserInfo() As IDAL.IUser
        Return CType(Assembly.Load("DAL").CreateInstance("DAL" & "." & strDB), IUser)
    End Function
上面strDB的值是从配置文件里取出来的,个人觉得,只个人觉得配置文件就是一个变量库。而不把这个变量写在代码中是由于配置文件是在系统执行的时候,就会将里面的值载入出来。

首先利用这次机会,我想说说我对反射的理解:

我们使用反射,首先要清楚命名空间中几个类的关系:

System.Reflection 命名空间

(1)AppDomain:应用程序域,能够将其理解为一组程序集的逻辑容器

(2)Assembly:程序集类

(3) Module:模块类

(4)Type:使用反射得到类型信息的最核心的类

他们之间是AppDomain能够包括多个Assembly,一个Assembly能够包括多个Module,一个Module能够包括多个Type.

在我们设计的机房收费系统中,上面的代码就是我们动态载入一个程序集(Assembly)。动态载入程序集的方法能够使用三种:Load。LoadFrom和LoadWithPartialName三个Assembly的静态方法。

显然我们用的是第一种。

Assembly.Load(),这种方法载入程序集的顺序是:首先它回去全局程序集缓存查找。再到应用程序的根文件夹查找,最后在应用程序的私有路径中查找。

Assembly.Load("")的使用说明例如以下;
并非命名空间。经常使用的是程序集名称,也就是dll的名称
名称     说明
Assembly.Load   (AssemblyName)     在给定程序集的   AssemblyName   的情况下,载入程序集。
关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而无论在哪一层写这段代码当中的("程序集")读取的实际是web层bin目录下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有。
Assembly.Load("程序集名")

在看我们的代码:程序集名为"DAL"(DAL为我的D层的文件包),直接上图大家看的更清楚:

大家能够看到在我的UI层(Web层)根本就没有DAL.dll文件,有的话依照字母排列应该在红线处。所以。我们就到DAL层(DAL\bin\release)将DAL.dll相关文件拷到Web层。结果:

好的,执行一下就好了。

System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息:尝试读取或写入受保护的内存。这通常指示其它内存已损坏。

错误背景: 操作系统:编程环境:VS2013。 语言:VB.net; 数据库:SQLserver2008 做数据库连接时。发生的错误

服务 在初始化安装时发生异常:System.IO.FileNotFoundException: "file:///D:\testService"未能加载文件或程序集。系统找不到指定文件。

@echo.@if exist "%windir%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" goto INSTALL4.0:INSTALL4.0@echo ◎ 开始安装服务2.0@%windir%\Microsoft.NET\Frame...

.net 5.0 在linux 启动报错 System.IO.FileNotFoundException:Unable to find the specified file. at Interop.Sys.GetCwdHepler.....

报错截图 解决方法: 确定启动dll没有拼错,如果确定没有拼错,使用 命令 cd .. 然后返回上一层路径,然后在进入到启动dll所在的目录再执行 dotnet 命令 ...