Added CCC (clear command channel) to FtpConnection (ClearCommandChannel property) FtpClient (ClearCommandChannel method). Clears the command channel after login to facilitate firewall NAT when connecting using a secure data channel.
Added UseRemoteAddress property to FtpConnection and FtpClient to correct issues when a server behind a firewall returns an internal address via PASV command to an external client.
The CertificateStore class has been removed. Developers now need to implement their own certificate store using the X509Store class.
AuthenticationMethod enumeration has been modified to match SslProtocols.DataChannelProtection enumeration: The Integrity and Confidential values have been obsoleted.
VerificationFlags enumeration has been modified to match X509VerificationFlags. The following values have been obsoleted: IgnoreAllTimeChecks, IgnoreAllRevUnknown, AllowTestRoot, and TrustTestRoot.
VerificationStatus enumeration has been modified to match X509VerificationFlags. The following values have been obsoleted: InvalidRole, ParentRevoked, UntrustedTestRoot, WrongUsage, and OtherError. (Note: As of build 4.1.9616.13400, this enumeration has the Flags attribute to match the X509ChainStatusFlags enum. This is a breaking change.)
ClientCertificate inherits from X509Certificate2.
The PBSZ and PROT P commands are now always sent when connecting to a server using implicit SSL/TLS to ensure the data channel is always encrypted.
FtpClient is used by FtpConnection instead of AsyncFtpClient. When using FtpConnection in a UI application, use FtpConnection.SynchronizingObject and call Application.DoEvents in an event.
AsyncFtpClient's methods now call the corresponding FtpClient (synchronous) methods on a background thread. It is therefore recommended that AsyncFtpClient be considered obsolete: use FtpClient and assign a SynchronizingObject to its SynchronizingObject property instead. Using FtpClient instead of AsyncFtpClient also has the advantage of producing code that is easier to debug and read.