Thanks for the question.
The user WITHOUT FileSystemProvider does not use virtual file system infrastructure at all.
The user WITH any FileSystemProvider uses virtual file system infrastructure. Only virtual file systems are exposed to the Rebex SFTP server using the adapter.
Although virtual file systems (VFS) are tightly integrated with the SFTP server, it's good to know that they are, in fact, standalone and independent components.
In the case you have described you experience some friction between both components/worlds.
The adapter between VFS and the SFTP server has two main responsibilities.
1) The adapter is an "anti-corruption layer" that prevents leaking SFTP details to VFS infrastructure.
2) The adapter does its best when it emulates direct access to the physical file system ('user without FileSystemProvider') using the VFS interface. We are still improving the adapter capabilities.
As you can imagine, the adapter tries hard to hide the unrepresentable details about specific VFS storage, and, in converse, maps disparate traits of the different VFS storage to a common SFTP denominator.
Apparently, as you discovered, the adapter is still not perfect. In one place sends a generic I/O error instead of the more specific 'file does not exist' error.
Rebex client works because its "communication pattern" slightly differs from the "Renci SSH" communication with the server, and Renci SSH activates different branches of the code in the adapter.
Simply put, the problem does not lie in (some) VFS providers that do not throw expected exceptions.
The difference in behavior you have observed can be reduced to the following points:
1) The 'user WITHOUT FileSystemProvider' does not use VFS, so the SFTP client does not have a chance to activate the 'throw general I/O error' in the "VFS<->SFTP adapter".
2) The 'user WITH FileSystemProvider' that uses the Renci SSH client activates the "VFS<->SFTP adapter" logic that throws a general I/O error.
I hope that my simplified explanation makes sense.
I apologize, but we don't publish the prerelease version on the Nuget server.