消耗项目中缺少DLL自身的依赖关系

时间:2019-10-30 11:23:51

标签: c# .net dll dependencies nuget

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

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

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

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

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

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

请参见this,当两个项目都在同一台计算机上时,建议不要使用引用汇编的方式。

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

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

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

答案 1 :(得分:0)

如果您的类库与使用它的应用程序位于同一解决方案或源代码控制存储库中,则应使用project-to-project reference,而不是直接引用该程序集。就像文档所说的那样,当您编译应用程序时,它会自动检测对类库的更改,但是文档没有说的是依存关系也同样存在。

否则,正如Lance Li所写,您应该从类库中创建一个NuGet包。不幸的是,入门有些障碍。 Creating the package很容易,但是您需要将nupkg文件发布到某个地方。对于早期开发(在准备共享软件包之前),最简单的选择是使用local file feed。然后,您将在应用程序中需要一个nuget.config,该应用程序将使用该软件包将本地供稿添加为源,然后可以在您的使用项目中install the package,这将带来依赖性。

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