- Home /
Getting SSH.NET to work in Unity
My steps:
Downloaded the library from https://github.com/sshnet/SSH.NET
Built the 3.5 framework one and copied the DLL at *\src\Renci.SshNet.NET35\bin\Debug\ into Unity assets
Wrote a script that should output "C" in a text field:
using System.IO;
using Renci.SshNet;
using Renci.SshNet.Common;
using Renci.SshNet.Sftp;
String Host = "ftp.csidata.com";
int Port = 22;
String RemoteFileName = "TheDataFile.txt";
String LocalDestinationFilename = "TheDataFile.txt";
String Username = "yourusername";
String Password = "yourpassword";
void Start(){
using (var sftp = new SftpClient(Host, Port, Username, Password))
{
sftp.Connect();
using (var file = File.OpenWrite(LocalDestinationFilename))
{
sftp.DownloadFile(RemoteFileName, file);
tex.text += "C";
}
sftp.Disconnect();
}
}
Build solution aimed at HoloLens:
SDK - Universal 10
Target device - Any device
UWP Build Type - D3D
Changed .dll settings to SDK: Any SDK ; ScriptingBackend: Dot Net ; Don't process: Checked
Unity version: 5.5.1f1 Visual Studio version: 2015 update 3
Expected results: Successful connection and letter "C" in text box
Actual results: No change to textbox. VS Debugger tells me:
An exception of type 'System.IO.FileLoadException' occurred in Renci.SshNet.dll but was not handled in user code
Additional information: Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Thank you in advance for the help.
Answer by hexagonius · Mar 24, 2018 at 10:52 AM
I found something that led me to the following assumption. The dll you compiled makes use of the NET core library, while nothing else of your code is. So unity is unaware of this dependency and does not provide it. Prove me wrong but I guess it's missing from the VS project folder. I found adding this line to any script makes Unity Core aware:
System.Collections.SortedList lst = new SortedList();
I found this here:
https://unity3d.com/de/partners/microsoft/porting-guides
I tried adding the line to the class as well as Start but unfortunately it doesn't change anything. Same error message. :Y
I've also tried building the UAP10 sln that's provided by SSH.NET and I get the same result.
If I add the lines
AssemblyName Core = new AssemblyName("System.Core, Version=3.5.0.0, Culture=neutral, Public$$anonymous$$eyToken=b77a5c561934e089, Retargetable=Yes");
Assembly.Load(Core);
It stops throwing the Exception but it also still doesn't connect properly. Also if I put it before any other code, that code no longer runs properly...
Your answer
Follow this Question
Related Questions
How to link to scripts in the Package Manager when building a dll. 0 Answers
The classes in the module cannot be loaded? 0 Answers
How do you use a class from a .dll file? 1 Answer
How do I use .NET 4.5 managed DLL called by a native DLL (Not easy, I swear I read doc) 0 Answers
ML.NET in unity 1 Answer