在.NET中,何时必须引用外部库也引用的DLL?

时间:2017-11-14 06:00:36

标签: c# .net clr

我试图理解我的.NET项目何时需要引用外部库引用的DLL。

一个实际示例:Microsoft.Bot.Builder依赖于Chronic.Signed.dll

如果我引用Microsoft.Bot.Builder.dll,我是否总是必须在我自己的项目中添加对Chronic.Signed.dll的引用,即使我没有直接使用它?或者我只在某些情况下才这样做?

3 个答案:

答案 0 :(得分:2)

  

如果我引用Microsoft.Bot.Builder.dll,我是否也必须添加   在我自己的项目中引用Chronic.Signed.dll,即使我没有   直接使用它?或者我只需要确定   情况?

使用NuGet添加软件包时,还会随附安装依赖软件包。因此,当您添加Microsoft.Bot.Builder.dll时,它将自动安装Chronic.Signed.dll。

现在来了,为什么?一些lib包依赖于其他包。像Microsoft.Bot.Builder.dll中的函数可能正在使用Chronic.Signed.dll中的一些帮助程序或主函数。因此,如果您将删除Chronic.Signed.dll的引用,您将收到缺少依赖项或引用的错误。

  

我总是还要添加        在我自己的项目中引用Chronic.Signed.dll,即使我没有        直接使用它?

是的,因为Microsoft.bot正在内部使用它。

并非所有包都依赖于其他包。有些是独立的,从不安装任何其他dll,但有些dll。

答案 1 :(得分:1)

当您使用Microsoft.Bot.Builder中的某些内容时,您需要执行此操作,该内容会在其公共API中公开来自Chronic.Signed的内容。例如(并且不经过我自己的库),让我们说Chronic.Signed.IFooMicrosoft.Bot.Builder.FooImpl实现的接口。如果您在代码中引用了Microsoft.Bot.Builder.FooImpl,那么您还需要引用Chronic.Signed,以便您的代码可以访问该界面。

答案 2 :(得分:0)

除非您从这些套餐中引用特定内容,否则您不应该这样做。如果您错过了一个导致您的代码无法编译或运行的依赖项,编译器很可能会抱怨它。

正如您需要安装多个DLL的简单示例一样,当您通过NuGet安装软件包时,有时软件包将具有将要安装的依赖项,以便能够在软件包中运行代码。但是,它们中的大多数将独立于任何其他包安装。您可以通过将一些引用放在另一个项目中不存在的库项目中,然后尝试从主项目运行代码来测试它在项目中的工作方式。您不应该引用与库项目相同的DLL。