我可以安全地删除对 .pdb 文件的引用吗?

Can I safely delete references to .pdb files?

我正在使用 ASP.NET Core 5.0,因为它是不久前推出的,今天我发现了一些奇怪的事情。 我为我的软件制作了一个安装程序,它会自动过滤掉进入我的发布版本的每个 .pdb 文件。一种从未引起问题的机制。

但是新的.NET 5.0 runtime好像有问题,IIS报错找不到文件runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.pdb.

我想知道为什么缺少调试符号会成为发布版本(或任何版本)的问题并进行了一些研究。我发现有问题的文件是 MyProject.deps.json

中的条目
"Microsoft.Data.SqlClient.SNI.runtime/2.0.1": {
    "runtimeTargets": {
      "runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.dll": {
        "rid": "win-arm",
        "assetType": "native",
        "fileVersion": "2.0.1.0"
      },
      "runtimes/win-arm/native/Microsoft.Data.SqlClient.SNI.pdb": {
        "rid": "win-arm",
        "assetType": "native",
        "fileVersion": "0.0.0.0"
      },
      "runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll": {
        "rid": "win-arm64",
        "assetType": "native",
        "fileVersion": "2.0.1.0"
      },
      "runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.pdb": {
        "rid": "win-arm64",
        "assetType": "native",
        "fileVersion": "0.0.0.0"
      },
      "runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll": {
        "rid": "win-x64",
        "assetType": "native",
        "fileVersion": "2.0.1.0"
      },
      "runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.pdb": {
        "rid": "win-x64",
        "assetType": "native",
        "fileVersion": "0.0.0.0"
      },
      "runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll": {
        "rid": "win-x86",
        "assetType": "native",
        "fileVersion": "2.0.1.0"
      },
      "runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.pdb": {
        "rid": "win-x86",
        "assetType": "native",
        "fileVersion": "0.0.0.0"
      }
    }
  },

如你所见,里面有4个.pdb文件。我尝试删除导致问题的一个条目,然后砰的一声……现在一切正常。只需将 .pdb 文件添加到文件夹中也可以解决问题。所以我已经自己解决了实际问题。

我的问题是:我能否安全地从 .deps.json 中删除这些条目,否则可能会导致问题? 这可能是微软的错误吗?这些条目是不小心滑进去的吗?

从 net core framework 3.0 开始,它们是必需的(应用程序在某些情况下会失败)。

库以非正统的方式使用这些 PDB,以生成当前正常工作所需的堆栈跟踪和信息。

但是,在 Native libraries not loaded in C# interactive 中,似乎对于全新的客户端,这些依赖项应该消失,因此不应再发布。

但是,Unable to load DLL 'Microsoft.Data.SqlClient.SNI.x86.dll' and Microsoft.Data.SqlClient.SNI not deployed along with WebForms 其他人也有问题,特别是在云上部署时,我们所有的 net-5 项目都将它们包含在它们的清单中。这可能是由于 Entity Framework 引用了旧版本的客户端。