即使没有引用Nuget软件包,也需要该软件包

时间:2019-11-07 22:03:19

标签: c# .net visual-studio nuget

在我的解决方案中,我有一个顶层项目,其中包含许多相关项目。其中一个相关项目具有对Nest nuget软件包的必需引用。因此,在该解决方案的nuget软件包配置中,我仅在引用它的项目中安装了Nest。

顶级项目引用了该从属项目,但没有引用Nest名称空间。它的构建没有警告或错误,但是,在运行时,我遇到了一个问题

Could not load file or assembly 'Nest, Version=7.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d' or one of its dependencies. The system cannot find the file specified.

当我在顶级项目上手动安装Nest软件包时,它成功完成而没有问题。

为什么会这样?不应在相关项目上安装Nest软件包来解决此相关问题吗?

1 个答案:

答案 0 :(得分:2)

  

其中一个从属项目具有对Nest的必需引用   nuget程序包。

您是否在相关项目中调用了Nest的函数?如果VS发现从属项目实际上并未在代码中调用(需要)该程序集,则VS不会将从属项目的程序集复制到顶级项目中。

  

为什么会这样?不应该在   依赖项目解决了这种依赖关系?

我不确定问题中提供信息的原因,很多因素都可能导致异常行为,有时VS版本也会影响它...

假设您有一个顶级项目A,并且它依赖于使用B的项目Project Reference

1。如果两个目标都针对.net framework,请确保它们使用相同的方式来管理nuget包。(两者都使用packages.config或两者都使用PackageReference

2。如果A.net framework项目,而B.net standard项目,请确保A也使用PackageReference格式管理nuget包。

由于.net standard(新的SDK格式)使用了PackageReference软件包,如果A使用了Packages.config并引用了B,则构建系统将对在构建过程中使用不同的Nuget格式。而且,我们找不到从Nest.dll输出文件夹复制到B's输出文件夹的A's

在这种情况下,请尝试将<RestoreProjectStyle>PackageReference</RestoreProjectStyle>添加到顶级A的项目文件中。(xx.csproj)这将确保A和B都可以恢复为PackageReference样式。

3。如果A.net frameworkpackageReference,而B.net frameworkPackages.config,则右键单击{{1 }},然后选择packages.config按钮。您也可以从this document获得一些帮助。

4。如果顶级项目是.net核心,而B项目的目标是.net标准,则在VS2017中,nest.dll不会复制到A的输出文件夹中,您可以尝试将Migrate Package.config to PackageReference添加到您的A.csproj即可解决此问题。类似的问题,请参见here。 (并且VS2019 16.3.8已修复此问题,此问题主要发生在VS2017中)

此行为也受VS版本的影响,如果您使用的是VS2017,请更新到最新的<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>以获取更好的体验。如果您使用的是VS2019,请将其更新为16.3.8。

希望它会有所帮助:)