【问题标题】:How do I get rid of SNI.dll when publishing as a "single file" in Visual Studio 2019?在 Visual Studio 2019 中作为“单个文件”发布时如何摆脱 SNI.dll?
【发布时间】:2020-11-28 00:16:17
【问题描述】:

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

  • 配置:发布 |任何 CPU
  • 目标框架:net5.0-windows
  • 部署模式:依赖框架
  • 目标运行时:win-x64
  • 生成单个文件:已启用
  • 启用 ReadyToRun 编译:已禁用

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

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

对此的任何帮助将不胜感激。干杯

PS。我应该提一下,我所有的谷歌尝试都发现了关于“SNI.dll Missing”、“SNI.dll failed to load”或其他一些变体的文章

【问题讨论】:

    标签: .net winforms publish


    【解决方案1】:

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

    您可能还想检查您的 .deps.json 文件(从您的构建文件夹中),看看您是如何获得这种依赖关系的。

    【讨论】:

    • 谢谢西蒙。您提供的链接帮助回答了我的一半问题(最重要的一半)。通过将 true 添加到我的发布 XML 文件中,SNI.dll 现在至少嵌入在 .exe 中,因此它不可见。有一天,我希望找出它存在的原因,因为我什至在我的整个解决方案中的任何地方都找不到对 System.Data 的引用,但你帮了大忙。干杯
    【解决方案2】:

    正如 Simon V. 所说,您可以通过将 IncludeNativeLibrariesForSelfExtract 添加到您的项目文件并将其设置为 true 来解决此问题。

    tl;博士 Dotnet 的 Windows 运行时依赖于 sni.dll。

    有一天我希望找出它存在的原因,因为我什至在我的整个解决方案中的任何地方都找不到对 System.Data 的引用,但你帮了大忙。干杯

    -- HumanBean

    您可能还想检查您的 .deps.json 文件(从您的构建文件夹中),看看您是如何获得这种依赖关系的。

    -- Simon V.

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

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

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

    {
      "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 实例共享以下属性...

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2013-02-09
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多