I'm trying to publish a very simple C# .Net 5.0 WinForms application (single file output) as a test case for porting from the .Net Framework v4.6.1 (what it was previously) while using Visual Studio 2019 v16.8.2. The Publish options are as follows:
Although the build works fine and merges the two source assemblies into a single output executable, it also includes SNI.dll in the output directory. The application will not start without this DLL in the same folder as the executable so my question is: How do I remove the dependency on SNI.dll so it does not get included with the published executable and is not required to run?
The application is a simple front-end to generate random data using the Crypto-API. It does not include any database functionality whatsoever, which is why it's so confusing to me that SNI.dll is included in the output. As far as I can tell, SNI.dll is related to Microsoft.Data.SqlClient, which I don't use
Any help with this would be most appreciated. Cheers
PS. I should mention, all my attempts to Google this fault have turned up articles about "SNI.dll Missing", "SNI.dll failed to load" or some other variant of that
I faced the same problem as yours and found the solution here. It turns out that native libraries are not bundled in the single file executable by default. You must set the flag IncludeNativeLibrariesForSelfExtract
to true
to get this behavior.
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.
Thanks Simon. The link you provided helped to answer half of my question (the most important half). By adding <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> to my publish XML file, SNI.dll is now at least embedded in the .exe so it's not visible. 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