c# - 如何跟踪 nuget 包引用的解析过程

标签 c# nuget

我有一个包含多个项目的解决方案 (~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/

相关文章:

java - 使用来自蓝牙连接的传入数据来处理特定对象? C# Windows 窗体应用程序和 Java Android 应用程序

c# - Paypal 快速结账 : Landing Page = Billing

c# - 跟踪用于将 native C++ DLL 包装到 .NET 的 DLL 依赖项

nuget - 为什么 NuGet 将包放在 "solution level"?

c# - 仅依赖项的空 Nuget 包

c# - 使用颜色代码从 Gridview 导出到 excel

visual-studio-2017 - 使用 nuget 包时,有没有办法避免使用 netstandard 程序集来支持 PCL?

visual-studio-2010 - 如何将 NuGet 包安装到解决方案中的第二个项目中?

nuget - 通过 nuget 安装 SignalR

c# - 让 log4net 工作