我正在尝试发布一个非常简单的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有关,我不使用
任何帮助,将不胜感激。干杯
PS。我应该提到,我对Google的所有尝试都导致了有关“ SNI.dll丢失”,“ SNI.dll加载失败”或其他一些变体的文章。
我遇到了与你相同的问题,并在此处找到了解决方案。事实证明,默认情况下,本机库未捆绑在单个文件可执行文件中。你必须将标志IncludeNativeLibrariesForSelfExtract
设置true
为得到此行为。
你可能还想检查.deps.json文件(从构建文件夹中),以首先了解如何获得此依赖关系。
谢谢西蒙。您提供的链接有助于回答我一半的问题(最重要的一半)。通过将<IncludeNativeLibrariesForSelfExtract> true </ IncludeNativeLibrariesForSelfExtract>添加到我的发布XML文件中,SNI.dll现在至少已嵌入在.exe中,因此它不可见。有一天我希望找出原因,因为我什至在整个解决方案的任何地方都找不到对System.Data的引用,但是您提供了很大的帮助。干杯