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

C# 在.NET中,何时必须引用外部库也引用的DLL?,c#,.net,clr,C#,.net,Clr,我试图理解.NET项目何时需要引用外部库引用的DLL 一个实际示例:Microsoft.Bot.Builder依赖于Chronic.Signed.dll 如果我引用Microsoft.Bot.Builder.dll,即使我没有直接使用它,我是否也必须在自己的项目中添加对Chronic.Signed.dll的引用?还是只有在某些情况下我才需要这样做?除非您引用了这些软件包中的特定内容,否则不需要这样做。如果您缺少一个会导致代码无法编译或运行的依赖项,编译器很可能会对此进行投诉 正如需要安装多个DL

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

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


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

除非您引用了这些软件包中的特定内容,否则不需要这样做。如果您缺少一个会导致代码无法编译或运行的依赖项,编译器很可能会对此进行投诉

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

如果我引用了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,但有些是独立的。

当您使用Microsoft.Bot.Builder中的某些内容时,需要这样做,该内容在其公共API中公开了慢性签名的
中的某些内容。例如(我自己也不需要浏览库),假设
Chronic.Signed.IFoo
是一个由Microsoft.Bot.Builder.FooImpl实现的接口。如果您在代码中引用了
Microsoft.Bot.Builder.FooImpl
,那么您还需要引用
Chronic.Signed
,这样您的代码就可以访问该接口。

嗯,如果您不引用Microsoft.Bot.Builder.dll中使用它们的任何内容,那么您就不需要引用其他程序集了…@RufusL是的,我同意。