C# X509链条的处理

C# X509链条的处理,c#,.net,C#,.net,在以.NET Framework 4.5.1为目标的Visual Studio 2013中,我发现处理A比预期的更困难。根据MSDN文档,从4.5X509Chain开始是一次性的。通过ildasm查看类也可以确认这一点: 然而,当试图将其放入这样的using语句中时: using (var chain = new X509Chain()) { } 我得到一个编译错误: 错误1“System.Security.Cryptography.X509Certificates.X509Chain”:

在以.NET Framework 4.5.1为目标的Visual Studio 2013中,我发现处理A比预期的更困难。根据MSDN文档,从4.5
X509Chain开始是一次性的。通过ildasm查看类也可以确认这一点:

然而,当试图将其放入这样的using语句中时:

using (var chain = new X509Chain())
{

}
我得到一个编译错误:

错误1“System.Security.Cryptography.X509Certificates.X509Chain”:using语句中使用的类型必须隐式转换为“System.IDisposable”

更令人困惑的是,VisualStudio对该类的定义表示它不可
IDisposable

但是,如果在运行时执行此操作:

var chain = new X509Chain();
try
{

}
finally
{
    var disposable = chain as IDisposable;
    if (disposable != null)
    {
        disposable.Dispose();
    }
}
实际上,对IDisposable的强制转换将成功,dispose将被调用

我认为问题是因为C:\Program Files(x86)\reference assembly\Microsoft\Framework.NETFramework\v4.5.1中的引用程序集没有实现
IDisposable
,即使在运行时使用的实际程序集实现了

是否有一种方法可以干净地处理
X509Chain
,而无需自己尝试/最终转换,即我可以使用
语句使其在
中工作?我想我可以自己包装这个类,但我不想引入新类型,我宁愿让编译器为我做这项工作


参考程序集在4.5.2中似乎存在相同的问题,但在4.6中已修复,但现在还没有考虑迁移到4.6。

我收到了Microsoft对此的响应(感谢Microsoft!)

事实证明,这在.NET4.6框架中是新的,MSDN文档还没有将从4.5到4.6的更改分离到单独的部分,并且页面没有特别提到这一点


我还犯了一个错误,本地安装了.NET4.6框架,这意味着运行时的实际程序集是4.6。如果我所处的环境只有4.5版本,我就会看到强制转换失败,并且永远不会调用dispose。

这个问题很烦人<代码>X509Certificate
(因此
X509Certificate2
)也存在同样的问题。