c# - nuget 没有使用 nuget 包中为 Microsoft.Extensions.Logging 指定的内容解决依赖关系
问题描述
背景:
我已经为 .net core(targetting)创建了一个类库v2.2
,并且我也有一个 .net core 应用程序(targetting v2.2
)。
我正在尝试将库导出为 nuget 包并将其安装在我的应用程序中。这是我的库的依赖项
我可以将它导出为 nuget 包,现在我将它存储在本地 nuget 存储库中。但是当我尝试在我的应用程序中安装这个库包时,由于Microsoft.Extensions.Logging
. 这是包管理器控制台输出。
问题:
我已经为 Microsoft.Extensions.Logging
ie指定了确切的版本,[2.2.0]
因为我们可以在显示我的库的依赖关系的屏幕截图中确认这一点,那么为什么它会被解析为 version3.0.0
呢?我该如何解决这个问题?
关于环境的详细信息:
- 使用的 NuGet 产品(包管理器控制台):包管理器控制台主机版本
5.3.1.6268
- VS 版本(如果适用):Microsoft Visual Studio Community 2019 版本
16.3.8
- 操作系统版本(即win10 v1607(14393.321)):Windows 10企业版:
1809
解决方案
我该如何解决这个问题?
要解决您身边的奇怪行为,您应该在当前项目中安装该包之前清理 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
避免以前的缓存影响当前项目。
希望以上所有帮助:)
推荐阅读
- dataframe - 使用分区批处理过程生成多个列,无需洗牌或自定义连接逻辑
- java - 如何将当前日期时间小时秒保存为字符串,以便我可以一次又一次地重复使用它
- git - Git分支-b“分支名称”从master创建?
- revit-api - Revit API - 如何在调用 PostCommand 后返回“正常代码”
- android - 当切换其他视图的可见性时,我的布局中的片段布局会上下移动
- entity-framework - ASP.NET Core Task.WhenAll - 在前一个操作完成之前在此上下文上启动了第二个操作
- python - 为 plotly.graph_objs.Bar 类型的对象指定的属性无效
- python - 解析错误:预期对应的 JSX 结束标记
? - css - 如何将 Bootstrap 切换的初始状态设置为折叠?
- python-3.x - Pickle 加载错误:无法在您的系统上实例化“WindowsPath”