在 Visual Studio 2019 年作为 "single file" 发布时如何摆脱 SNI.dll?

How do I get rid of SNI.dll when publishing as a "single file" in Visual Studio 2019?

我正在尝试发布一个非常简单的 C# .Net 5.0 WinForms 应用程序(单个文件输出)作为从 .Net Framework v4.6.1(以前的版本)移植的测试用例,同时使用 Visual Studio 2019 v16.8.2。发布选项如下:

虽然构建工作正常并将两个源程序集合并为一个输出可执行文件,但它还在输出目录中包含 SNI.dll。如果没有这个 DLL 与可执行文件位于同一文件夹中,应用程序将无法启动,所以我的问题是:如何删除对 SNI.dll 的依赖,这样它就不会包含在已发布的可执行文件中,也不会包含在已发布的可执行文件中需要 运行?

该应用程序是一个使用 Crypto-API 生成随机数据的简单前端。它不包含任何数据库功能,这就是为什么它让我感到困惑以至于 SNI.dll 包含在输出中。据我所知,SNI.dll 与 Microsoft.Data.SqlClient 有关,我不使用

如有任何帮助,我们将不胜感激。干杯

PS。我应该提一下,我对 Google 这个错误的所有尝试都出现了关于“SNI.dll 丢失”、“SNI.dll 加载失败”或

的其他变体的文章

我遇到了与您相同的问题并找到了解决方案 here。事实证明,默认情况下,本机库并未捆绑在单个文件可执行文件中。您必须将标志 IncludeNativeLibrariesForSelfExtract 设置为 true 才能获得此行为。

您可能还想检查您的 .deps.json 文件(来自您的构建文件夹)以了解您最初是如何获得此依赖项的。

正如 Simon V. 所说,您可以通过将 IncludeNativeLibrariesForSelfExtract 添加到项目文件并将其设置为 true.

来解决此问题

tl;博士 Dotnet 的 Windows 运行时取决于 sni.dll.

One day I hope to find out why it's there at all since I can't even find a reference to System.Data anywhere in my entire solution, but you've been a big help. Cheers

-- HumanBean

You might also want to check your .deps.json file (from your build folder) to see how you got this dependency in the first place.

-- Simon V.

给定发布目录路径“bin\Release\net6.0-windows\win-x86\publish”,在父目录(win-x86,RID)中检查名为“$(AssemblyName).deps.json".

在该文件夹中搜索依赖项的程序集名称或文件名。

在我项目的依赖文件中,“sni.dll”被以下片段引用:

{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v6.0/win-x86",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v6.0": {},
    ".NETCoreApp,Version=v6.0/win-x86": {
      ...
      "runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
        "native": {
          "runtimes/win-x86/native/sni.dll": {
            "fileVersion": "4.6.25512.1"
          }
        }
      },
      ...
    }
  }
}

为了进一步调查,我将提供更多信息。

我计算机上 sni.dll 的所有实例共享以下属性...

  • 产品版本:4.6.25512.01 构建者:dlab-DDVSOWINAGE016。提交哈希:d0d5c7b49271cadb6d97de26d8e623e98abdc8db
  • 产品名称:Microsoft® .NE​​T Framework
  • 修改日期:2017 年 7 月 12 日。

我想知道为什么 .NET 5+ 运行时依赖于似乎是 .NET Framework 的组件。