C#项目参考的问题

我有ac#solution,它由众多项目组成。

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

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

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

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

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

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

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

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

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

从示例中,应用程序层仅需要对BAL的引用才能与DAL交互。

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

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

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