使用WinSCP程序集不匹配作为对象引用的C#Windows服务未设置为对象的实例

时间:2019-06-28 04:32:04

标签: c# service winscp

我正在编写代码,以通过WinSCP将文件上传到sftp服务器。 代码中的其他所有内容都可以正常工作,除非我开始将WinSCP包含在代码中。程序集安装失败,因为它显示错误,其中“对象引用”未设置为对象的实例。

这是使用WinSCP .net参考附带的VS 2010在Windows Services上运行的。

下面是设置程序集的代码,由于需要更高版本的Visual Studio,我无法使用NuGet。

所以我必须创建一个从WinSCP网站本身获得的程序集,但是我不明白我在这里缺少什么。

            try
            {
                Assembly executingAssembly = Assembly.GetExecutingAssembly();
                string resName = executingAssembly.GetName().Name + "." + "WinSCP.exe";
                using (Stream resource = Assembly.GetExecutingAssembly().GetManifestResourceStream(resName))
                using (Stream file = new FileStream(executablePath, FileMode.Create, FileAccess.Write))
                {
                    resource.CopyTo(file);
                }
            }
            catch (System.Exception ex)
            {
                WriteToFile("Cant setup assembly : " + ex.Message);

结果应该是,当程序集成功创建后,上传会话将能够通过,直到此时我收到一个错误消息“ C:\ Windows \ TEMP \ WinSCP.tmp311D的版本。 exe()与该程序集的版本somedir \ WinSCPnet.DLL(5.15.2.0)不匹配。“

少量帮助将非常有帮助。

1 个答案:

答案 0 :(得分:1)

我发现了问题。显然,我已经有了程序集,这就是为什么错误提到我的程序集版本错误。但是,无法匹配的主要原因是

  1. 临时WinSCP是在我的程序无法访问的文件夹中创建的。
  2. 我复制粘贴了WinSCP exe,而不是通过VS中的“添加项”进行添加。
  3. 然后,我将WinSCP.exe的可执行路径硬编码为固定程序集,以查找错误的文件夹。

我的问题已经解决。