该应用程序要求首先在全局程序集缓存 (GAC) 中安装程序集 WinSCP 版本 1.0.6.3261

The application requires that assembly WinSCP Version 1.0.6.3261 be installed in the Global Assembly Cache (GAC) first

我已经开始在我的应用程序中使用 WinSCP .NET 程序集来启用 SFTP 传输。一切都很好,代码运行良好。

我的问题来自部署。

首先,我通过 NuGet 包管理器(版本 5.7)安装了 WinSCP。

如上所述,我的代码运行良好,可以很好地连接到我的 SFTP 服务器,传输、重命名和删除文件也很好。

但是....

当我发布应用程序时,我收到以下错误消息:

Unable to install or run the application. The application requires that assembly WinSCP Version 1.0.6.3261 be installed in the Global Assembly Cache (GAC) first.

有趣的是,WinSCPnet.dll从 NuGet 安装的版本是 1.2.6.5125。

我正在使用 VS 2013 Ultimate,并使用内置的发布向导。

网上搜了一下,有文章说WinSCPnet.dll需要在GAC里面,所以我的第一个动作就是手动添加WinSCPnet.dll的安装版本(版本1.2.6.5125)使用 gacutil /I winscpnet.dll 进入目标计算机上的 GAC,这确实成功了,因为它在 Windows\assembly 文件夹中可见,但在尝试重新安装应用程序后目标计算机上出现相同的错误消息。

真可惜,除非我能解决这个问题,否则我将不得不停止使用该产品并尝试其他产品。

看起来您发布的应用程序使用的程序集版本与构建应用程序所针对的版本不同。

WinSCP .NET 程序集版本 1.0.6.3261 随 WinSCP 5.1.5 一起提供。

我建议您从项目中删除对 WinSCP 的所有引用,删除程序集的所有副本,然后从 NuGet 重新安装程序集。

然后确保:

  • Solution Explorer 中,Copy Local 属性 设置为 True WinSCPnet.dll
  • 在项目属性中,转到 Publish 页面,单击 Application Files 并确保 Publish Status 设置为 Include for WinSCPnet.dll

(尽管从 NuGet 安装程序集时这些应该是默认值)

联系 WinSCP 支持后,碰巧问题出在设置上。

发布应用前需要检查以下内容。

在项目属性中,转到发布页面,单击应用程序文件并确保发布状态设置为包含 WinSCPnet.dll