我已经开始在我的应用程序中使用WinSCP.NET程序集来启用SFTP传输。一切都很好,代码运行得很好。
我的问题来自部署。
首先,我通过NuGet软件包管理器(5.7版)安装了WinSCP
如上所述,我的代码工作得很好,连接到我的SFTP服务器很好,传输、重命名和删除文件都很好。
但是。。。。
当我发布应用程序时,我收到以下错误消息:
无法安装或运行应用程序。该应用程序要求首先在全局程序集缓存(GAC)中安装程序集WinSCP版本1.0.6.3261。
有趣的是,从NuGet安装的WinSCPnet.dll
版本是1.2.6.5125。
我正在使用VS2013Ultimate,并使用内置的发布向导。
环顾网络,我发现有文章说WinSCPnet.dll
需要在GAC中,所以我的第一个操作是使用gacutil /I winscpnet.dll
将已安装的WinSCPnet.dll
版本(1.2.6.5125)手动添加到目标机器上的GAC中。这确实成功了,因为它在Windowsassembly
文件夹中可见,但在尝试重新安装应用程序后,目标机器上出现了相同的错误消息。
很遗憾,除非我能解决这个问题,否则我将不得不停止使用这个产品,尝试其他东西。
您发布应用程序时使用的程序集版本与构建应用程序时所使用的版本不同。
WinSCP.NET程序集版本1.0.6.3261随附WinSCP 5.1.5。
我建议您从项目中删除对WinSCP的所有引用,删除程序集的所有副本,然后从NuGet重新安装程序集。
然后确保:
- 在解决方案资源管理器中,
WinSCPnet.dll
的Copy Local属性设置为True - 在"项目属性"中,转到"发布"页面,单击"应用程序文件",并确保
WinSCPnet.dll
的"发布状态"设置为"包含"
(尽管在从NuGet安装程序集时,这些应该是默认值)
联系WinSCP支持后,问题恰好与安装有关。
在发布应用程序之前,需要检查以下内容。
在"项目属性"中,转到"发布"页面,单击"应用程序文件",并确保"发布状态"设置为"包括WinSCPnet.dll "