首页 > 解决方案 > nuget 没有使用 nuget 包中为 Microsoft.Extensions.Logging 指定的内容解决依赖关系

问题描述

背景:

我已经为 .net core(targetting)创建了一个类库v2.2,并且我也有一个 .net core 应用程序(targetting v2.2)。

我正在尝试将库导出为 nuget 包并将其安装在我的应用程序中。这是我的库的依赖项

MyLib 依赖项

我可以将它导出为 nuget 包,现在我将它存储在本地 nuget 存储库中。但是当我尝试在我的应用程序中安装这个库包时,由于Microsoft.Extensions.Logging. 这是包管理器控制台输出。

包管理器控制台输出

问题:

我已经为 Microsoft.Extensions.Loggingie指定了确切的版本,[2.2.0]因为我们可以在显示我的库的依赖关系的屏幕截图中确认这一点,那么为什么它会被解析为 version3.0.0呢?我该如何解决这个问题?

关于环境的详细信息:

标签: c#visual-studio.net-corenugetnuspec

解决方案


我该如何解决这个问题?

要解决您身边的奇怪行为,您应该在当前项目中安装该包之前清理 nuget 缓存。

(为了确保缓存被清理,我建议你去%userprofile%\.nuget\packages检查文件夹中是否存在Com.lib文件Packages夹)

我已经为 Microsoft.Extensions.Logging 指定了确切的版本,即 [2.2.0],因为我们可以在屏幕截图中确认我的库的依赖关系,那么为什么它会解析为 3.0.0 版本?

我认为您要安装的(Com.Mylib)不是您打包的第一个。我的意思是,您实际上可能会构建和打包几个具有不同内容的不同 Com.Mylib 包。他们的名字都是Com.lib.1.0.0.nupkg.

Nuget 将所有 nuget 缓存存储在%userprofile%\.nuget\packages. 因此,如果我曾经在任何项目中安装一个 PackageA。PackageA 的缓存存储在那里。如果我打开一个新项目尝试安装具有相同版本(1.0.0)的 PackageA,它实际上会从缓存中安装一个。所以我们会遇到这种奇怪的行为:

在此处输入图像描述

Nuget 可以识别 Com.lib 包依赖于其他 2.2.0 包。但是当它尝试安装该软件包时,它发现该软件包已存在于缓存中。然后他尝试从缓存中安装一个,我猜缓存中的内容与您最新的内容不同,然后出现问题。

建议:

1.本地开发时,使用项目引用而不是Nuget包。

2.如果每次打包后都需要测试nuget包,请确保包版本已经增加。(1.0.0=>1.0.1=>1.0.3...或beta-1.0.12,预览- xxx)

3.如果您有特殊原因使用相同的1.0.0版本,请clean the cache避免以前的缓存影响当前项目。

希望以上所有帮助:)


推荐阅读