ICU4J содержит хорошую поддержку номера-spellout. Файлы с «правилами» могут быть легко отредактированы, и нет никакого смысла добавлять другие языки (мы сделали это, например, для польского и русского).
По-видимому, потому, что я открывал его из файла каждый раз, когда ключевой контейнер перегенерировался (или что-то еще). Вот код, который работает:
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2 c = store.Certificates
.Find(X509FindType.FindBySubjectName, SIGNED_SUBJECT, true)
.Cast<X509Certificate2>()
.FirstOrDefault();
store.Close();
RSACryptoServiceProvider rsa = c.PrivateKey as RSACryptoServiceProvider;
Console.WriteLine("Certificate thumbprint:" + c.Thumbprint);
Console.WriteLine("From machine key store?: " + rsa.CspKeyContainerInfo.MachineKeyStore);
Console.WriteLine("Key container name: " + rsa.CspKeyContainerInfo.KeyContainerName);
Console.WriteLine("Key unique container name: " + rsa.CspKeyContainerInfo.UniqueKeyContainerName);
Раньше при запуске фрагмента кода из моего исходного сообщения (где я открываю сертификат как файл) информация о ключах, которая печатается на консоли, будет меняться каждый раз. Запуск измененного кода показывает одну и ту же информацию каждый раз.