英文:
Getting 'System.ObjectDisposedException' in System.dll in the exit terminal when disconnecting the sshclient with Renci.SshNet
问题
以下是翻译好的代码部分:
我使用的方法如下:
public int ExecuteShellCommand(string a_command, bool log = false)
{
int res = 0;
try
{
using (var sshclient = new SshClient(m_connNfo))
{
sshclient.Connect();
using (var cmd = sshclient.CreateCommand(a_command + " >&2"))
{
var resultExe = cmd.Execute();
if (log)
{
Console.Write(resultExe);
var extended = cmd.ExtendedOutputStream;
var reader = new StreamReader(extended);
Console.Write(reader.ReadToEnd());
}
res = cmd.ExitStatus;
}
}
}
catch (Exception)
{
return -1;
}
return res;
}
m_connNfo是使用以下行创建的:
m_connNfo = new ConnectionInfo(ConfigurationManager.AppSettings[IP], 22, User,
new AuthenticationMethod[]{
// 基于密码的身份验证
new PasswordAuthenticationMethod(User,ApiInstance.GetPass())
});
请注意,这是您提供的代码的翻译部分,不包括问题或其他内容。
英文:
The method I use is as follow :
public int ExecuteShellCommand(string a_command, bool log = false)
{
int res = 0;
try
{
using (var sshclient = new SshClient(m_connNfo))
{
sshclient.Connect();
using (var cmd = sshclient.CreateCommand(a_command + " >&2"))
{
var resultExe = cmd.Execute();
if (log)
{
Console.Write(resultExe);
var extended = cmd.ExtendedOutputStream;
var reader = new StreamReader(extended);
Console.Write(reader.ReadToEnd());
}
res = cmd.ExitStatus;
}
}
}
catch (Exception)
{
return -1;
}
return res;
}
The m_connNfo is created with the line :
m_connNfo = new ConnectionInfo(ConfigurationManager.AppSettings[IP], 22, User,
new AuthenticationMethod[]{
// Pasword based Authentication
new PasswordAuthenticationMethod(User,ApiInstance.GetPass())
});
This works perfectly and do want I expect it to do, the problem is when the '}' of the "try" is reach, so when the using is closed, I get an "System.ObjectDisposedException in System.dll" in the exit terminal.
It also happens when I do :
sshclient.Disconnect();
before closing the using.
I wish to understand why it does that.
Does someone understand why I get this exception ?
答案1
得分: 1
感谢Roe和Ralf,我发现错误是来自于SshClient的dispose。
这是一个来自于Renci.SshNet 2017旧版本的错误,这个bug在2020版本中已经修复。
所以为了解决这个问题,我不得不将我的RenciSsh dll更新到最新版本。
英文:
Thanks to Roe and Ralf, I discovered that the error was coming from the dispose of the SshClient.
It's an error that comes from an old version of Renci.SshNet 2017, this bug is fixed in the 2020 version.
So to fix this problem, I had to update my RencySsh dll to the newest version.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论