Hum*_*ean 24 .net publish winforms
我正在尝试发布一个非常简单的 C# .Net 5.0 WinForms 应用程序(单个文件输出)作为使用 Visual Studio 2019 v16.8.2 时从 .Net Framework v4.6.1(以前的版本)移植的测试用例。发布选项如下:
尽管构建工作正常并将两个源程序集合并为单个输出可执行文件,但它还在输出目录中包含 SNI.dll。如果没有此 DLL 与可执行文件位于同一文件夹中,应用程序将无法启动,因此我的问题是:如何删除对 SNI.dll 的依赖关系,使其不包含在已发布的可执行文件中并且不需要运行?
该应用程序是一个使用 Crypto-API 生成随机数据的简单前端。它不包含任何数据库功能,这就是为什么我对输出中包含 SNI.dll 感到如此困惑。据我所知,SNI.dll 与 Microsoft.Data.SqlClient 相关,我不使用它
任何对此的帮助将不胜感激。干杯
附言。我应该提到,我在 Google 上搜索此错误的所有尝试都出现了有关“SNI.dll 丢失”、“SNI.dll 加载失败”或其他一些变体的文章
Sim*_* V. 24
我遇到了和你一样的问题,并在这里找到了解决方案。事实证明,默认情况下,本机库并未捆绑在单个可执行文件中。您必须将标志设置IncludeNativeLibrariesForSelfExtract为true才能获得此行为。
您可能还想检查您的 .deps.json 文件(来自您的构建文件夹),以了解您最初是如何获得此依赖项的。
小智 7
正如 Simon V. 所说,您可以通过添加IncludeNativeLibrariesForSelfExtract到项目文件并将其设置为true.
tl;dr\nDotnet 的 Windows 运行时依赖于 sni.dll。
\n\n\n有一天,我希望找出它存在的原因,因为我什至在整个解决方案中的任何地方都找不到对 System.Data 的引用,但你帮了我很大的忙。干杯
\n
--人豆
\n\n\n您可能还想检查您的 .deps.json 文件(来自您的构建文件夹),以了解您最初是如何获得此依赖项的。
\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}\nRun Code Online (Sandbox Code Playgroud)\n为了进一步调查,我将提供更多信息。
\n我的计算机上 sni.dll 的所有实例都共享以下属性...
\n我想知道为什么 .NET 5+ 运行时依赖于 .NET Framework 的组件。
\n