私はX509Store
と彼の友達、X509Certificate2
とX509Certificate2Collection
を使っています。すべてうまくいきましたが、自分のコードのテストを書くようになりました。問題に遭遇しました。私は新しいテスト証明書を生成し、それをインストールして各テストを開始し、最後にテスト証明書を削除します。テスト証明書は、作成日が過去1日で、有効期限が1日後であっても、確定的ではありません。X509Storeを正しく使うには?
私は、完全なGCを実行し、TearDownでファイナライザを待っていることがテストを修正していることに気付きました。
ここではリファレンスソースを掘り下げています。 X509Certificate2
を削除する必要があると思われます。そうでないと、ストアに追加するなど、すでに成功した操作は実際のストアにフラッシュされませんでした(これはWindows APIの動作です。CertCloseStore
CRYPT_E_PENDING_CLOSE
の結果を参照)。
さらにX509Certificate2Collection
は基本的にはList<X509Certificate2>
と思われるので、このような証明書のリストが作成されるたびに、店舗のCertificates
プロパティを読み取るなど、すべてのインスタンスを廃棄する必要があります。
Find
方法を使用される時は、これは、一時的なストアを作成本命を追加して、アンマネージコードから再び本命を読み、またすべてをする必要が本命の新しいコレクションを作成する必要が配置される。
これは本当にX509Store
を使用する正しい方法ですか? .NET APIが非常に安全でなく、どこでも静かな失敗と完全に文書化されていない失敗モードで正しく使用するのは信じられないようです。明白な何かを見逃しているのでしょうか、これらのクラスをすべて避けるべきですか?
[これはドキュメントに記載されています](https://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store(v = vs.110).aspx): 'Starting .NET Framework 4.6では、この型はIDisposableインターフェイスを実装します。あなたがタイプの使用を終えたら、それを直接的または間接的に処分するべきです。 –
あなたは単に '使用する 'ことはできませんか? – starmandeluxe