在我的解决方案中,我有一个顶层项目,其中包含许多相关项目。其中一个相关项目具有对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软件包来解决此相关问题吗?
答案 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 framework
和packageReference
,而B
是.net framework
和Packages.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。
希望它会有所帮助:)