我试图理解我的.NET项目何时需要引用外部库引用的DLL。
一个实际示例:Microsoft.Bot.Builder依赖于Chronic.Signed.dll
如果我引用Microsoft.Bot.Builder.dll,我是否总是必须在我自己的项目中添加对Chronic.Signed.dll的引用,即使我没有直接使用它?或者我只在某些情况下才这样做?
答案 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.IFoo
是Microsoft.Bot.Builder.FooImpl
实现的接口。如果您在代码中引用了Microsoft.Bot.Builder.FooImpl
,那么您还需要引用Chronic.Signed
,以便您的代码可以访问该界面。
答案 2 :(得分:0)
除非您从这些套餐中引用特定内容,否则您不应该这样做。如果您错过了一个导致您的代码无法编译或运行的依赖项,编译器很可能会抱怨它。
正如您需要安装多个DLL的简单示例一样,当您通过NuGet安装软件包时,有时软件包将具有将要安装的依赖项,以便能够在软件包中运行代码。但是,它们中的大多数将独立于任何其他包安装。您可以通过将一些引用放在另一个项目中不存在的库项目中,然后尝试从主项目运行代码来测试它在项目中的工作方式。您不应该引用与库项目相同的DLL。