C#项目参考的问题

时间:2010-02-18 16:11:20

标签: c# dll visual-studio-2005 reference

我有一个c#解决方案,它由许多项目组成。

我有一个项目,它是我的基础组件,包含其他项目使用的所有常见信息。所有其他项目都引用了基础组件。

我在我的baseassemblies中添加了一个dll引用,但所有其他项目都看不到它。

如何才能使其他项目可以看到baseassemblies正在引用的DLL?我不想将DLL添加到所有项目中,因为这会破坏我的基础组件项目的目的。

6 个答案:

答案 0 :(得分:23)

正确的方法是让您的其他程序集不需要引用其他DLL。正确执行此操作的方法是不让基本程序集公开该DLL中的任何类型。在基础程序集中包含所需的所有功能,并确保使用基础程序集的任何人都不需要了解底层dll的基本程序集。否则,每个将引用基本程序集的项目,如果需要使用该dll中包含的内容,则必须引用它。

答案 1 :(得分:10)

.NET中没有传递引用。如果程序集需要引用另一个程序集,它必须直接执行,它不能“继承”来自另一个引用的引用。

注意,项目只需要引用它直接使用类型的程序集。如果A使用B,而B使用C,但A不直接使用C,那么A只需要直接引用B(加载器将处理B引用C)。

答案 2 :(得分:3)

总之你无法做到。您需要添加对包含您尝试使用的代码的DLL的引用,否则它将无法看到它。

我的建议是在“BaseAssemblies”项目中创建一个层,您可以从应用程序访问该层,从而创建一个分层架构。

例如

应用层 - 使用IDataClass
业务逻辑层 - 定义IDataClass
数据访问层 - MyRawDataClass(实现IDataClass)

从示例中,应用程序层只需要对BAL的引用即可与DAL交互。

答案 3 :(得分:0)

您可以让BaseAssemblies导出必须由“其他”dll实现的接口。此外,您的BaseAssemblies需要为这些类提供一些“类工厂”功能。

答案 4 :(得分:0)

其他海报是正确的:你不能这样做。这是,恕我直言,可怜的Visual Studio。 20年前,“制造”处理这个干净的饼干......

答案 5 :(得分:0)

在某些情况下,您的项目引用A,而A又引用B,但在构建时,B并不总是在BIN文件夹中,并且您只在代码运行时才意识到这一点。有一个相关的SO问题HERE。人们以奇怪的方式解决了这个问题,但我特别喜欢John Hunter的解决方案。此SO thread还讨论了使用构建事件来实现所需结果的解决方案。