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

C# Windows Services using WinSCP assembly mismatch as object reference not set to an instance of an object

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

这是 运行 Windows 使用 WinSCP .net 参考中包含的 VS 2010 的服务。

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

所以我必须创建这个我从 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);

结果应该是,当程序集成功创建时,上传会话将能够完成,因为上传会话我收到错误消息 "The version of C:\Windows\TEMP\WinSCP.tmp311D.exe () does not match version of this assembly somedir\WinSCPnet.DLL (5.15.2.0)."

小小的帮助会很有帮助。

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

  1. 临时 WinSCP 是在我的程序无权访问的文件夹中创建的。
  2. 我复制粘贴了 WinSCP exe,而不是在 VS 中通过 "Add Item" 添加。
  3. 然后我将可执行路径硬编码到 WinSCP.exe 以修复查找错误文件夹的程序集。

我的问题已经解决