В Visual Studio 2013, ориентированном на .NET Framework 4.5.1, я считаю, что удаление X509Chain
сложнее, чем ожидалось. Согласно документации MSDN, начиная с 4.5 X509Chain
является одноразовым. Справочный источник подтверждает это, и просмотр класса с ildasm также подтверждает его:
И все же, когда вы пытаетесь поместить его в оператор using следующим образом:
using (var chain = new X509Chain())
{
}
Я получаю ошибку компиляции:
Ошибка 1 'System.Security.Cryptography.X509Certificates.X509Chain': тип, используемый в операторе using, должен быть неявно преобразован в 'System.IDisposable'
Более смутно, определение Visual Studio класса говорит, что это не IDisposable
.
Однако, если во время выполнения я делаю это:
var chain = new X509Chain();
try
{
}
finally
{
var disposable = chain as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
В самом деле, приведение к IDisposable
будет успешным, а dispose вызывается.
Я думаю, проблема связана с тем, что эталонная сборка в C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.1 не реализует IDisposable
, хотя фактическая сборка, используемая во время выполнения,.
Есть ли способ, которым я могу полностью избавиться от X509Chain
, не выполняя попытку/окончательно и не отбрасывая себя, то есть я могу заставить его работать в инструкции using
? Я полагаю, что сам я мог бы обернуть класс, но я бы предпочел не вводить новый тип, я бы предпочел заставить компилятор выполнить эту работу для меня.
Похоже, что эталонная сборка имеет ту же самую проблему в 4.5.2, однако она исправлена в 4.6, но переход на 4.6 не находится на радаре прямо сейчас.