我有一个包含多个项目的解决方案(~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; 我使用绑定重定向来解决同一库的不同版本的问题。
我的问题是是否有一种方法可以诊断包引用的特定 dll 如何出现在 bin 文件夹中?我希望看到某种依赖解析的全面跟踪,以便我可以在不使用“试错”方法的情况下修复它。
更新。
实际上,感谢大家指出结构化日志记录。你是最棒的!所以问题是其中一个项目指向<OutputPath>宿主bin项目的文件夹。因此,当项目构建时,它会覆盖宿主项目中的二进制文件。显然,由于不断的引用改组,构建顺序发生了变化,并且错误的项目<OutputPath>最后开始构建。为了找出这一点 1) 我在第 2 节中记录了 Newtonsoft.Json ,分析了我在第 2节DoubleWrites中发现的双重写入的位置_CopyFilesMarkedLocal
Copying file from "\VenomousProject\bin\Debug\Newtonsoft.Json.dll" to "HostProject\bin\Debug\Newtonsoft.Json.dll".
Run Code Online (Sandbox Code Playgroud)
就是这样。
您可以尝试 MSBuild 二进制和结构化日志查看器 ( https://msbuildlog.com/ )
msbuild -bl- 你会得到msbuild.binlog| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |