首页 > 解决方案 > 找出依赖项 / dll 的来源

问题描述

为了安全措施,我需要更新 Microsoft.Data.OData dll/package。不幸的是,不清楚为什么这个 dll 在我们的输出(bin 文件夹)中。它在某个间接使用的地方,我们想知道在哪里。

这个包在 csproj 文件中没有被引用——我们为此使用<PackageReference>了旧式 csproj。( <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">)

有没有办法找出这个 dll (Microsoft.Data.OData.dll) 的来源?我试过:

我可以使用其他一些日志或工具吗?

标签: .netvisual-studionuget

解决方案


您可以通过将开关传递给任何 MSBuild 执行来创建二进制 MSBuild 日志。-bl例如msbuild -bl运行默认目标(通常是构建),msbuild -t:publish -bl在运行发布时获取二进制日志。

如果不指定二进制日志文件名,则默认msbuild.binlog在当前目录,而不是项目目录。

然后您可以使用https://www.msbuildlog.com查看二进制日志。您可以搜索 dll 文件名,并找到它被复制的位置(以及构建中的所有其他引用)。

我使用 SDK 风格的项目进行了测试,因为它更容易、更快捷,但对于非 SDK 风格的项目来说也是类似的。dll 被复制到名为 的目标中的 bin 文件夹中_CopyFilesMarkedCopyLocal,任务名为Copy. 我以 NuGet.Versioning 包为例,我看到了以下消息:

将文件从“C:\Users\zivkan\.nuget\packages\nuget.versioning\5.7.0\lib\netstandard2.0\NuGet.Versioning.dll”复制到“C:\src\test\binlogDemo\bin\Debug \net5.0\NuGet.Versioning.dll”。

请注意,如果您使用诊断冗长进行构建,则几乎所有信息都将出现在文本日志输出中。因此,这些“将文件从 ... 复制到 ...”消息不需要使用 binlog,但是一旦您习惯了 binlog,它们就会更容易阅读和使用。


推荐阅读