В Visual Studio 2013, ориентированном на .NET Framework 4.5.1, я считаю, что удаление X509Chain
сложнее, чем ожидалось. Согласно документации MSDN, начиная с 4.5 X509Chain
является одноразовым. reference source подтверждает это, и глядя на класс с ILDASM также подтверждает это:Утилизация X509Chain
И все же, при попытке поставить его в использовании заявление так:
using (var chain = new X509Chain())
{
}
я получаю ошибка компиляции:
Error 1 'System.Security.Cryptography.X509Certificates.X509Chain': type used in a using statement must be implicitly convertible to 'System.IDisposable'
Более смешения, определение Visual Studio о классе говорит, что это не IDisposable
.
Однако, если во время выполнения Я делаю это:
var chain = new X509Chain();
try
{
}
finally
{
var disposable = chain as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
Действительно, приведение к IDisposable
будет успешным, и распоряжаться будет вызван.
Я думаю вопрос в том, что ссылка сборки в C: \ Program Files (x86) \ Ссылка Сборки \ Microsoft \ Framework.NETFramework \ v4.5.1 делает не реализовать IDisposable
, даже если фактическая сборка используется в время выполнения.
Есть ли способ, которым я могу чисто распоряжаться X509Chain
, не выполняя попытку/окончательно и отдавая себя, то есть могу ли я заставить его работать в заявлении using
? Я полагаю, что сам я мог бы обернуть класс, но я бы предпочел не вводить новый тип, я бы предпочел заставить компилятор выполнить эту работу для меня.
Похоже, что эталонная сборка имеет ту же самую проблему в 4.5.2, однако она зафиксирована в 4.6, но переход на 4.6 не находится на радаре прямо сейчас.
Эта проблема раздражает. 'X509Certificate' (и, следовательно,' X509Certificate2') имеет ту же проблему. – vcsjones