Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-获取引用的引用_C#_.net_Dll_.net 2.0_Class Library - Fatal编程技术网

C#-获取引用的引用

C#-获取引用的引用,c#,.net,dll,.net-2.0,class-library,C#,.net,Dll,.net 2.0,Class Library,我已经建立了一个类库项目,它引用了几个dll。在类库项目的构造函数中,我使用了引用的dll之一中的一些枚举。在另一个项目中使用我的类库时,是否可以不向我的dll和我的类库项目内部引用的dll添加引用?您只需要引用dll即可。仅引用在程序集中使用的内容;组件是完全自描述的单个单元,因此不需要引用引用的组件引用(我在这里重复使用“引用”一词是开玩笑的,顺便说一下:-) 想象一下,如果你真的必须这么做——BCL引用了许多不同的东西,更不用说第三方组件了,想象一下你需要付出多大的努力才能得到正确的引用

我已经建立了一个类库项目,它引用了几个dll。在类库项目的构造函数中,我使用了引用的dll之一中的一些枚举。在另一个项目中使用我的类库时,是否可以不向我的dll和我的类库项目内部引用的dll添加引用?

您只需要引用dll即可。仅引用在程序集中使用的内容;组件是完全自描述的单个单元,因此不需要引用引用的组件引用(我在这里重复使用“引用”一词是开玩笑的,顺便说一下:-)


想象一下,如果你真的必须这么做——BCL引用了许多不同的东西,更不用说第三方组件了,想象一下你需要付出多大的努力才能得到正确的引用

这取决于内部引用的含义

如果应用程序项目使用类库中的类型A,并且该类不公开其他库中的任何公共类型(无论是否为第三方库),则无需添加对包含类型A的类库以外的其他类库的任何引用

但是,如果类型A公开了一些公共属性、返回类型或获取类型参数的方法,或者类型A可能是位于某个其他程序集中的类型的后代,那么您也需要对该其他程序集的引用

因此,如果您确实是指内部使用,那么就不必向类库添加多个引用


但是,如果编译器抱怨,那么这就是问题所在。

如果您正在引用任何类型(即使只是它们的成员或类型化实例)如果引用的程序集正在公开,那么您还必须包含对该程序集的引用。

我不确定您想做什么,但如果不想引用,您不必引用任何程序集。你可以使用反射。它通常被认为是一种黑客行为,不值得推荐,但有时是必要的。
解释如何在ctor中获取自己的枚举,并将其转换为第三方枚举。我相信这将使调用方不必引用第三方程序集(当然,它仍然需要在运行时可用才能使代码正常工作)。

我认为lassevk对其进行了简要的解释,但只想补充一点,尽管您不需要引用DLL使用的其他程序集(再次假设它们仅在内部使用,不暴露),您仍然需要使它们可供应用程序访问。也就是说,它们必须是可查找的——可以与应用程序一起查找,也可以在GAC中查找,否则使用它们的DLL将无法找到它们。

如果一个库确实公开了它自己的第三方引用类型,那么总体而言,它将导致大量失败。封装人员!!