我有一个包含多个项目的解决方案 (~400)。他们中的很多人都在使用 newtonsoft.json
图书馆。其中一些正在使用不同版本的库。在 Web 应用程序的宿主项目中,没有直接引用 newtonsoft.json
.另外,我相信,依赖于 newtonsoft.json
的包存在依赖关系。 .但是,在该项目的 bin 文件夹中,我开始得到 newtonsoft.json 9.0
而不是 newtonsoft.json 11.0
往常。由于版本无效,它会导致运行时加载异常。如果我直接引用 newtonsoft.json 11.0
,即使我清除了所有 bin、obj 文件夹,它仍然会将 9.0 版放在 bin 文件夹中。我使用 PackageReference 来管理依赖项,一切都在 . net 4.6.1
;我使用绑定(bind)重定向来解决同一库的不同版本的问题。
我的问题是是否有一种方法可以诊断 bin 文件夹中 package ref 的特定 dll 是如何出现的?我希望看到某种依赖解析的综合跟踪,这样我就可以在不使用“试错法”的情况下修复它。
更新。
实际上,感谢大家指出结构化日志记录。你是最棒的!所以问题是其中一个项目有 <OutputPath>
指向 bin
宿主项目的文件夹。因此,在构建项目时,它覆盖了宿主项目中的二进制文件。显然,由于持续的引用改组和错误的项目,构建顺序发生了变化 <OutputPath>
最后开始 build 。要找出这一点 1) 我 Newtonsoft.Json 被记录在 DoubleWrites
中第 2 部分)分析我在 _CopyFilesMarkedLocal
中发现的双重写入的位置节
Copying file from "\VenomousProject\bin\Debug\Newtonsoft.Json.dll" to "HostProject\bin\Debug\Newtonsoft.Json.dll".
就是这样。
最佳答案
您可以尝试 MSBuild 二进制和结构化日志查看器 (https://msbuildlog.com/)
- 使用
msbuild -bl
从命令行构建项目 - 您将获得msbuild.binlog
- 用日志查看器打开二进制日志并使用dll名称作为搜索词
- 检查与 dll 相关的所有记录并回溯到错误文件版本所在的位置(项目和 msbuild' 目标)。
关于c# - 如何跟踪 nuget 包引用的解析过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74004433/