VS.NET的web解决方案中,一个解决方案里可能有很多工程,除了“表现层(UI层)工程以外”,其它工程都是dll工程。如果各个工程之间随便引用dll,经常会发生dll之间的引用冲突,导致工程无法编译。可以有2种解决方法:

1.如果把所有的工程都放在一个大的解决方案里,那么就要设置工程的编译顺序。

        把只引用系统dll的工程最先编译,总有一些工程,只是引用System、System.Data、System.Xml等系统dll,这些工程就先编译。类推,引用到上面编译好的dll的工程后一步编译……直到最后一个工程。
        如何设置工程的编译顺序呢?在“解决方案“图标上点右键->“项目依赖项...”,在里面把各个项目的依赖项目设置好,在“项目生成顺序”里,项目的编译顺序就自动调整好了,这样编译的时候就不会出现dll冲突的问题了!
        这种方法的好处是,每次只要编译一遍,就能把所有的工程都编译好,保证从vss里签出的文件都能被编译。缺点是,要是编译很大的解决方案要n长时间!

2.把各个工程单独编译,并把dll输出到同一个指定的目录下,所有的工程都引用改目录下的dll。

        如果你同时打开了2个以上的VS.NET并相互的工程,那么,有可能在编译时,系统会报错,说指定的dll正被占用。

该种方式要做的事是:
        a.指定输出目录,在工程图标上点右键->“配置属性”里的“生成”、“输出”,设置好输出路径,再在“通用属性”里把“引用路径”里的错误dll引用路径删除。
        b.不把引用的dll拷贝到本地目录。把项目引用dll全选中,在属性里的“复制本地”设为false就可以了,不设的话有可能发生“变量已在多处重复定义”的错误。主要,对于UI层工程(就是能运行的工程),一定要把所有改工程引用到的dll都拷贝到其bin目录下,因为“能运行的工程”在运行时只会到bin目录下寻找dll,没有的话,就会报找不到dll的运行时错误!
        这种方法的好处是各个项目组只要编译自己的dll,然后提交给配置管理员,由配置管理员统一编译整个解决方案,速度比较快。缺点是,如果某个项目组只更新了源代码文件,没有提交编译好的dll,那么解决方案里引用的就不是最新的dll。

以上2种方法可以解决dll之间引用冲突的问题!

posted on 2006-09-07 11:46  EasyWriter  阅读(1226)  评论(1编辑  收藏  举报