我有一个c#解决方案,它由许多项目组成。C#项目参考的问题
我有一个项目,是我的baseassemblies持有其他项目中使用的所有公共信息。所有其他项目都引用了基本程序集。然而
我加入我的baseassemblies一个dll引用的所有其他项目无法看到它。
我怎样才能让这个其他的项目可以看到,baseassemblies被引用的DLL?我不想将DLL添加到所有项目,因为这会破坏我的baseassemblies项目的目的。
我有一个c#解决方案,它由许多项目组成。C#项目参考的问题
我有一个项目,是我的baseassemblies持有其他项目中使用的所有公共信息。所有其他项目都引用了基本程序集。然而
我加入我的baseassemblies一个dll引用的所有其他项目无法看到它。
我怎样才能让这个其他的项目可以看到,baseassemblies被引用的DLL?我不想将DLL添加到所有项目,因为这会破坏我的baseassemblies项目的目的。
正确的做法是为您的其他组件就是不用其他DLL的参考。正确地做到这一点的方法是不让基本程序集公开该DLL中的任何类型。将所需的所有功能封装在基本程序集中,并确保使用基本程序集的人员无需知道底层dll的基本程序集正在使用。否则,每个将引用基本程序集的项目,如果他们需要使用该dll中包含的内容,他们将不得不引用它。
在.NET中没有传递引用。如果程序集需要引用另一个引用,它必须直接这样做,它不能“继承”来自另一个引用的引用。
注意,项目只需要引用它直接使用类型的组件。如果A使用B,B使用C,但A不直接使用C,那么A只需要直接引用B(加载器将处理B引用C)。
总之,你不能这样做。您需要添加对包含您要使用的代码的DLL的引用,否则它将无法看到它。
我的建议是建立在你的“BaseAssemblies”项目的一层,你可以从你的应用程序基本上创建了一个分层架构访问。
例如
应用层 - 使用IDataClass
业务逻辑层 - 定义IDataClass
数据访问层 - MyRawDataClass(实现IDataClass)
从例如,应用层只需要一个参考到BAL以便能够与DAL交互。
你可以有必须由你的“其他” DLL中实现你的BaseAssemblies导出接口。另外,您的BaseAssemblies需要这些类的一些“类工厂”功能。
其他海报是正确的:你不能这样做。这是恕我直言,Visual Studio的可悲。 “使”处理这种清洁在20年前的馅饼...
+1你打我吧。我同意100% – 2010-02-18 16:18:37
在许多情况下,这对大型代码库并不实用。这是一个很好的“理论”答案,但它需要编码和测试方面的额外努力才能使其发生(经常)不增值。我并不是说它当然是不适合的...... – 2010-12-06 17:05:38