针对这个问题我在敲VB.NET机房收费系统的时候总共出现了两次,第一次是在使用反射+抽象工厂的时候出现的,第二次是在使用VS2012自带的打包工具生成可执行文件执行exe文件的时候出现的。具体看下图:
第一次:
第二次:
再说这两个问题的解决方案前首先必须明白一个道理我们所建立的任何解决方案,所有的层之间都是有直接或者间接的关联关系的。就拿我做的机房收费系统的关系如图所示:
我们通过U层(windows窗体,肯定要是启动项)的"生成"可以得到如下图所示,
通过图片可以看出U层根本没有生成D层的dll(动态链接库文件),原因就是依次引用关系的限制:U层为启动项,他和Façade BLLAbstractFactory 以及IDAL为依次引用关系,而DAL和U层不是依次引用关系。假设我们在IDAL和DAL的引用关系换一下,改成IDAL引用DAL,这样当我们在运行U层的时候debug文件都都会有我们所有层的dll文件。关于为什么需要dll文件不知道的可以去查查百科,这里就不再赘述。
首先明确一点,U层为启动项,当我们启动解决方案的时候在“UI层”----“编译”---“生成输出路径”(如下图所示)的文件夹中必须有我们所有要使用的项目。否则就会出现找不到程序集的错误。
通过上面的讲解,知道了项目与项目之间的关系,我们就可以知道那个项目和那个项目之间不是依次的引用关系,而为了解决我们启动解决方案出现错误的问题我们将缺少的项目的dll文件复制到启动项的“编译”----“生成输出路径”的该文件夹下。这样解决了找不到程序集的错误。
下面具体说一下针对我出现的问题的解决方案:
可以肯定的是D层没有和U层有依次引用的关系,我们需要手动添加dll文件。
第一次的:复制D层的dll文件到 U层的debug文件夹下。
第二次的:在我添加UI层主输出的同时添加 DAL.dll如图所示: