我有一个c#解决方案,它由许多项目组成。
我有一个项目,它是我的基础组件,包含其他项目使用的所有常见信息。所有其他项目都引用了基础组件。
我在我的baseassemblies中添加了一个dll引用,但所有其他项目都看不到它。
如何才能使其他项目可以看到baseassemblies正在引用的DLL?我不想将DLL添加到所有项目中,因为这会破坏我的基础组件项目的目的。
答案 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)