CurrentCulture и SecurityException - PullRequest
1 голос
/ 22 июня 2011

Мы пишем несколько графических приложений winForms, использующих инвариантную культуру.Итак, в начале Main у нас есть:

    [STAThread]
    static void Main()
    {
        CultureInfo culture = CultureInfo.InvariantCulture;
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
        ... 

Проблема в том, что на некоторых машинах это работает отлично, но на некоторых машинах на некоторых конфигурациях (например, Debug / AnyCPU для машин x64) это вызывает SequrityException

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

Так в чем проблема?И почему это происходит только при некоторых условиях?

1 Ответ

1 голос
/ 18 августа 2011

Другой post упоминает проблемы безопасности при использовании инвариантной культуры. Возможно, это ваша проблема?

Использование свойства InvariantCulture

The InvariantCulture property represents neither a neutral nor a

специфическая культура. Он представляет собой третий тип культуры, который культура нечувствительные. Это связано с английским языком, но не со страной или регионом. Ваши приложения могут использовать это свойство почти с любым методом в пространстве имен System.Globalization, который требует культуры. Тем не менее, приложение должно использовать инвариант культура только для процессов, которые требуют независимых от культуры результатов, такие как форматирование и анализ данных, которые сохраняются в файл. В в других случаях он дает результаты, которые могут быть лингвистически неправильно или неуместно в культурном отношении.

Security Considerations If a security decision will be made based

в результате сравнения строк или изменения регистра, ваше приложение следует использовать порядковое сравнение, которое игнорирует регистр вместо использования InvariantCulture. Стандартные реализации таких методов, как Compare () () () и ToUpper используют свойство CurrentCulture. Код, который выполняет строковые операции, чувствительные к культуре уязвимости, если текущая культура изменена или если культура на компьютер под управлением кода отличается от культуры, используемой для тестирования код. Поведение, которое вы ожидаете при написании строковой операции отличается от фактического поведения вашего кода при выполнении компьютер. Напротив, порядковое сравнение зависит исключительно от двоичное значение сравниваемых символов.

String Operations If your application needs to perform a

Операция с чувствительной к культуре строкой, на которую значение не влияет CurrentCulture, он должен использовать метод, который принимает CultureInfo параметр. В заявке должно быть указано значение Свойство InvariantCulture для этого параметра. Приложение должно используйте свойство с такими методами, как Compare () () () и ToUpper, чтобы устранить культурные различия и обеспечить последовательные результаты. Для большего информация об использовании свойства InvariantCulture для выполнения Операции с нечувствительными к культуре строками, см. Строка, нечувствительные к культуре Операции.

Persisting Data The InvariantCulture property is useful for

хранение данных, которые не будут отображаться непосредственно пользователям. хранения Данные в независимом от культуры формате гарантируют известный формат, который не меняется. Когда пользователи из разных культур получают доступ к данным, он может быть отформатирован в зависимости от конкретного пользователя. Например, если ваше приложение хранит типы DateTime в текстовом файле, отформатированный для инвариантной культуры приложение должно использовать Свойство InvariantCulture при вызове ToString для хранения строк и метод Parse для извлечения строк. Эта техника обеспечивает что базовые значения типов DateTime не изменяются при данные читаются или пишутся пользователями из разных культур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...