项目引用不当,可能引发编译错误
最近发现一个不解的问题,就是从源代码管理器获取的最新版本的
项目解决方案编译不能正常完成,从错误提示中看到是因为引用的一个自定义的项目的dll文件不存在,曾经尝试逐个编译每个项目,但是不论先后顺序如何轮
换,都不能编译通过,最后把之前用过的两个dll文件拷贝到地址E:"SaleProject\Components\bin\Debug文件夹内,编译
可以通过了。BdWater.Sale.Components.dll,BdWater.Sale.WebComponents.dll就是需拷贝的
dll文件。虽然编译通过了,但是当时并不清楚为什么会这样,以前这个项目不需要这么操作的。最后找到了病根,原来是我在做发票管理系统后期管理时在
Componenst工程中引用了WebComponents项目的dll文件,这样操作的原因是因为Component工程中数据库操作的Sql语句中
需要将当前登录用户信息写入数据库,而获取该信息是通过WebComponents项目中的服务提供的,故引用了该项目文件。知道错在哪里了,下面是改正
错误具体做法是:
(1)将Components中所有涉及引用命名空间BdWater.Sale.WebComponents的代码行注释掉
(2)将涉及到数据库操作需当前登录用户信息的函数多添加一个参数,在UI层代码编写时将用户信息以参数形式传递给函数进行处理,而不是在函数内部进行处理,添加一个参数这样Components项目中就不必需要引用BdWater.Sale.WebComponents命名空间来获取用户信息了。而真正信息提供则是UI层调用WebComponents项目中一个类的函数得到的。
总结: 之前未曾考虑项目引用会出问题,Components层次要比WebComponents低,故不可以调用WebComponents。经测试问题现已解决。但是还有一点概念不太清晰,交叉引用和我以上所述是否是同一概念,忘各位指点。
(1)将Components中所有涉及引用命名空间BdWater.Sale.WebComponents的代码行注释掉
(2)将涉及到数据库操作需当前登录用户信息的函数多添加一个参数,在UI层代码编写时将用户信息以参数形式传递给函数进行处理,而不是在函数内部进行处理,添加一个参数这样Components项目中就不必需要引用BdWater.Sale.WebComponents命名空间来获取用户信息了。而真正信息提供则是UI层调用WebComponents项目中一个类的函数得到的。
总结: 之前未曾考虑项目引用会出问题,Components层次要比WebComponents低,故不可以调用WebComponents。经测试问题现已解决。但是还有一点概念不太清晰,交叉引用和我以上所述是否是同一概念,忘各位指点。
请多指教