C# Azure Function调用WinSCP时Session.Open找不到winscp.exe如何解决
方案1:直接指定可执行文件路径(无需修改部署配置,推荐)
报错提示已经明确可以通过Session.ExecutablePath显式指定winscp.exe的路径,你已经确认文件存放在D:\home\site\wwwroot路径下,直接在打开会话前添加一行配置即可,代码修改如下:
using (Session session = new Session()) { // 新增这一行,也可以用环境变量拼接适配不同环境,避免写死绝对路径 session.ExecutablePath = Environment.GetEnvironmentVariable("HOME") + @"\site\wwwroot\winscp.exe"; try { session.Open(sessionOptions); // 后续原有逻辑 } // 原有catch逻辑 }
方案2:调整项目配置让winscp.exe自动部署到bin目录
如果你需要让winscp.exe跟随程序集部署到wwwroot/bin路径,修改你的Azure Function项目的.csproj文件,添加如下配置强制构建时将winscp.exe复制到输出目录:
<ItemGroup> <Content Include="winscp.exe"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
如果你的WinSCP是通过NuGet包安装的,检查NuGet包的配置,确认WinSCP.targets已经被正确导入,部分版本的NuGet包在Azure Functions项目中会出现复制逻辑失效的问题,手动添加上述配置即可生效。重新发布后,winscp.exe会被自动包含在bin目录下,无需额外操作。
注意事项
检查你的Azure Function运行环境的位数,报错日志中显示当前运行的是32位版本的函数运行时,确保你使用的winscp.exe是32位版本,避免后续出现兼容性问题。
内容的提问来源于stack exchange,提问作者G. Trennert
相关产品推荐
相关产品推荐

