在 Visual Studio 2019 中作为“单个文件”发布时如何摆脱 SNI.dll?

Hum*_*ean 24 .net publish winforms

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

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

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

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

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

附言。我应该提到,我在 Google 上搜索此错误的所有尝试都出现了有关“SNI.dll 丢失”、“SNI.dll 加载失败”或其他一些变体的文章

Sim*_* V. 24

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

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

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

小智 7

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

\n

tl;dr\nDotnet 的 Windows 运行时依赖于 sni.dll。

\n
\n

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

\n
\n

--人豆

\n
\n

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

\n
\n

——西蒙·V.

\n

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

\n

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

\n

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

\n
{\n  "runtimeTarget": {\n    "name": ".NETCoreApp,Version=v6.0/win-x86",\n    "signature": ""\n  },\n  "compilationOptions": {},\n  "targets": {\n    ".NETCoreApp,Version=v6.0": {},\n    ".NETCoreApp,Version=v6.0/win-x86": {\n      ...\n      "runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {\n        "native": {\n          "runtimes/win-x86/native/sni.dll": {\n            "fileVersion": "4.6.25512.1"\n          }\n        }\n      },\n      ...\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

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

\n

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

\n
    \n
  • 产品版本:4.6.25512.01 构建者:dlab-DDVSOWINAGE016。提交哈希:d0d5c7b49271cadb6d97de26d8e623e98abdc8db
  • \n
  • 产品名称:Microsoft\xc2\xae .NET Framework
  • \n
  • 修改日期:2017 年 7 月 12 日。
  • \n
\n

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

\n