.net - 找出依赖项 / 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) 的来源?我试过:
在代码中搜索 - 我们的代码不使用它。
检查了构建日志。我在构建日志中看到了这一点:
Primary reference "Microsoft.Data.OData, Version=5.8.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35". 2> Resolved file path is "C:\Users\MyUsername\.nuget\packages\microsoft.data.odata\5.8.2\lib\net40\Microsoft.Data.OData.dll". 2> Reference found at search path location "{RawFileName}". 2> Found related file "C:\Users\MyUsername\.nuget\packages\microsoft.data.odata\5.8.2\lib\net40\Microsoft.Data.OData.xml". 2> Found satellite file "de\Microsoft.Data.OData.resources.dll". 2> Found satellite file "es\Microsoft.Data.OData.resources.dll". 2> Found satellite file "fr\Microsoft.Data.OData.resources.dll". 2> Found satellite file "it\Microsoft.Data.OData.resources.dll". 2> Found satellite file "ja\Microsoft.Data.OData.resources.dll". 2> Found satellite file "ko\Microsoft.Data.OData.resources.dll". 2> Found satellite file "ru\Microsoft.Data.OData.resources.dll". 2> Found satellite file "zh-Hans\Microsoft.Data.OData.resources.dll". 2> Found satellite file "zh-Hant\Microsoft.Data.OData.resources.dll". 2> This reference is not "CopyLocal" because at least one source item had "Private" set to "false" and no source items had "Private" set to "true". 2> The ImageRuntimeVersion for this reference is "v4.0.30319".
检查了 csproj(这里没有 packages.config) - 它不存在
清理 bin 文件夹并重建 - 清楚这个 dll 正在输出哪个项目,重建后它就在那里。
我可以使用其他一些日志或工具吗?
解决方案
您可以通过将开关传递给任何 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,它们就会更容易阅读和使用。
推荐阅读
- arrays - 小三角形,大三角形代码不起作用
- javascript - 在 Javascript 中将 Application/octet-stream 转换为 Base64 字符串
- asp.net - 这种通过 Set-Cookie 设置 cookie 的尝试被阻止,因为它具有“安全”属性
- python - 旋转 pygame 屏幕
- azure - 更改 microsoft azure 身份颁发者
- function - 关于按月和地区分组的总平均值的问题-谷歌表
- td-engine - 有没有办法删除TDengine数据库中某个vnode下的数据?
- python - 如何在电脑上查看kivy应用程序日志
- python - 发生错误时如何防止python exe关闭
- bitbake - Bitbake 如何处理食谱中的“inc”文件