|
|
1
5
我对正在发生的事情的理解是,您只引用来自主程序和编译器的库A,它告诉您添加对库B的引用,因为库A公开的某些类型是在库B中定义的。 要解决此问题,请将对库B的引用添加到主程序项目中。 这是一个小图表。如果库A公开了在库B中定义的类型,那么main也必须引用库B。以下情况不起作用:
仅当通过库A可以访问库B中定义的类型时,此问题才会出现。这将出现在以下情况之一:
您需要从assembly1添加对assembly3的引用,以使其编译。
|
|
|
2
5
如果librarya公开属性,从方法返回对象,或者接受libraryb中定义的类型的参数,并且在其中一个类型的主程序中声明或使用变量,则需要using语句。 |
|
|
3
1
由于库A使用的是来自库B的混合方法和接口,如果库A和库B存在于不同的命名空间中,则需要一个using语句,这就是C的工作方式。编译器需要知道在哪里可以找到库A中使用的库B类型。 |
|
|
4
0
你所用的只是
存在的事实
|
|
|
5
0
正如其他答案已经正确解释的那样,您的主程序需要引用库B,因为库A通过自己的公共API公开了库B类型。即。
通常,正确的解决方案只是将库B的引用添加到主程序中。毕竟,主程序在运行时当然需要库B,即使它本身不直接访问该库中声明的任何类型。 但是,如果出于某种原因添加引用有问题,假设您至少可以更改库A,则还有一种替代方法。即封装库B中类型的使用,以便 不 对使用库A的代码可见。通常,这种封装将涉及某种代理或包装,以隐藏对第三个库的使用,并(在某些情况下)将第三个库的功能公开给引用第二个库的程序集。 例如,可以将库A更改为如下所示:
然后,只要您想使用库B中的扩展方法,就可以使用
当然,上面假定主程序实际上没有直接使用库B中的任何内容,并且库B中类型的所有用法都只在库A中找到,甚至在返回值、属性类型等方面都没有从库A中暴露出来,但是如果不是这样呢?例如,如果您希望主程序在不引用库的情况下从库B访问扩展方法,该怎么办? 好吧,我的第一个回答是,“去吧,已经参考了大会!”:)但是为了争论,我们假设你因为某种原因不能这样做,或者这样做至少很不方便。然后,您可以扩展代理方法,将代理方法添加到您的库A类型中,然后再将代理方法委托给库B中的实现。
例如,扩展上面的内容,可以添加到
请注意,该方法本身不添加库B的公共用法。相反,它使用(先前解释的)代理实例将调用委托给库B中声明的扩展方法。这样,只有库A实际需要引用库B;主程序可以引用库A而不暴露于库B因此不需要显式引用。
正如我之前提到的,不必添加对库B的引用当然并不意味着库B不需要 目前 让程序运行。您仍然需要将库放在那里,这样当库A调用它时,就可以使用它。拥有主程序引用库B是我所知道的确保库B被复制到构建输出目录以确保DLL存在的最简单方法之一。 |
|
6
-1
C中的分部类只是存在于多个文件中的类。不能有两个文件在不同的命名空间中定义分部类。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 10 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 11 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 11 月前 |
|
|
Duck0 · 这个对象在更高的帧率下会更快吗,因为它在Update()中? 11 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 11 月前 |