即使没有引用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软件包来解决此相关问题吗?

nikoliu1 回答:即使没有引用Nuget软件包,也需要该软件包

  

其中一个从属项目具有对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。

希望它会有所帮助:)

本文链接:https://www.f2er.com/3141406.html

大家都在问