找出依赖项/ dll的来源

时间:2020-10-12 10:31:41

标签: .net visual-studio nuget

出于安全措施,我需要更新Microsoft.Data.OData dll /程序包。 不幸的是,目前尚不清楚为什么该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正在输出的项目,并且在重建后就在那里。

还有其他我可以使用的日志或工具吗?

1 个答案:

答案 0 :(得分:1)

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

如果您未指定二进制日志文件名,则默认为当前目录中的msbuild -t:publish -bl,而不是项目目录。

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

我使用SDK风格的项目进行了测试,因为它非常容易和快捷,但对于非SDK风格的项目却是如此。将dll复制到目标为msbuild.binlog的目标文件夹中的bin文件夹中,并执行名为_CopyFilesMarkedCopyLocal的任务。我以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,它们就更易于阅读和使用。