在使用项目时缺少 DLL 自己的依赖项



我使用 C# 和 .Net 创建了一个类库项目。

在这个项目中,我使用了两个外部依赖项(更具体地说:Microsoft.Win32.Registry(4.6.0)和System.Data.SqlClient(4.7.0)Nuget包)。

构建此项目后,我可以在/bin/debug 文件夹下看到生成的 DLL 文件。

现在我想在另一个项目中导入这个生成的 DLL 并使用它的方法。导入并运行此项目后,它抱怨无法找到我在类库项目中拥有的两个外部依赖项。

作为临时修复,我可以在此项目中导入这两个缺少的引用,它将正常工作且符合预期。但这不是我想要的(我想也不是一个干净的解决方案)。

我想知道为什么类库项目的依赖项没有反映在生成的dll文件中?有什么办法可以解决这个问题吗?

非常感谢您的帮助。

如果类库与使用它的应用位于同一解决方案或源代码管理存储库中,则应使用项目到项目引用,而不是直接引用程序集。正如文档所说,这样它就会在您编译应用程序时自动检测对类库的更改,但文档没有说的是依赖项也会流动。

否则,正如 Lance Li 所写,您应该从类库创建一个 NuGet 包。不幸的是,入门有点障碍。创建包很容易,但随后您需要将nupkg文件发布到某个位置。对于早期开发(在包准备好共享之前),最简单的选择是使用本地文件源。然后,你需要在应用中有一个nuget.config,该将使用包将该本地源添加为源,然后你可以在使用项目中安装包,这将带来依赖项。

如您所见,对于开发而言,这是缓慢而困难的,因为如果您的消费应用在包中发现错误,或者如果您尝试同时在使用应用和类库中开发新功能,这意味着每次您对类库进行代码更改时,都需要增加版本号, 打包包,发布包,然后在使用项目中更新包版本。使用ProjectReference要容易得多,它可以让你简单地编辑代码、编译、运行。没有什么可考虑的了。

看到这一点,当两个项目在同一台机器上时,不建议使用引用该程序集的方式。

您正在使用文件引用(添加引用 =>浏览...)。这就是为什么您必须在此项目中手动导入这两个缺失的引用的原因。

所以我建议你添加项目引用,如果两个项目都在同一个解决方案中,你可以right-click current project=>add reference=>project tab find that assembly you need.(而不是浏览...

如果引用的项目不在同一解决方案中。在解决方案资源管理器=>添加现有项目以将其导入解决方案。然后添加项目引用。

最新更新