2011-06-22 14 views
1

不変の文化を使用するいくつかのwinForms GUIアプリケーションを記述します。だから我々は持っているメインの初めに:CurrentCultureとSecurityException

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

問題は、それが完璧に動作し、いくつかのマシンではなく、いくつかの構成上のいくつかのマシン上で(x64のマシンあちこちデバッグ/ AnyCPUように)それはSequrityException

Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. 
を上げるということです

それで問題は何ですか?それはなぜいくつかの条件でのみ起こるのですか?

+0

CultureInfoには何か関係があることがわかりますか? – sehe

+0

例外がスローされる場所です。コメントしても例外はありません。または私はあなたの質問を理解していない。 – MajesticRa

答えて

1

もう1つのpostには、不変のカルチャを使用する際のセキュリティの問題が記載されています。おそらくこれはあなたの問題ですか?

The InvariantCulture property represents neither a neutral nor a 

特定の文化をにInvariantCultureプロパティを使用して

。これは、文化に依存しない である第3の種類の培養を表す。それは英語に関連付けられていますが、国または地域に属していません。 アプリケーションでは というこのプロパティを使用でき、 にはCultureが必要なSystem.Globalization名前空間のほとんどすべてのメソッドが使用できます。ただし、アプリケーションは、文化に依存しない結果を必要とするプロセスに対してのみ、不変の カルチャを使用する必要があります。 ファイルに保存されているデータの書式設定や解析などがあります。 の場合、言語的には の結果が不正確または文化的に不適切です。

Security Considerations If a security decision will be made based 

文字列の比較やケースの変化の結果で、アプリケーション ではなく にInvariantCultureを使用した場合を無視する序数の比較を使用する必要があります。 Compare()()()およびToUpperなどのメソッドのデフォルトの実装では、CurrentCultureプロパティが使用されます。 CurrentCultureが変更された場合、またはコードを実行している コンピュータのカルチャが コードをテストするために使用されたカルチャと異なる場合、 がカルチャセンシティブな文字列操作を実行するコードにより、セキュリティの脆弱性が発生する可能性があります。文字列操作 を記述するときに期待する動作は、実行中のコンピュータ でのコードの実際の動作と異なります。対照的に、序数の比較は、比較文字のバイナリ値の にのみ依存します。 CurrentCultureの値 に影響されない

String Operations If your application needs to perform a 

培養感受性文字列操作は、それのCultureInfo パラメータを受け入れる方法を使用すべきです。アプリケーションは、このパラメータの InvariantCultureプロパティの値を指定する必要があります。アプリケーションは のCompare()()()やToUpper( )などのメソッドでプロパティを使用し、文化的なバリエーションを排除し、一貫した結果を保証する必要があります。 InvariantCultureプロパティを使用して カルチャを区別しない文字列操作を実行する方法については、Culture-Sensensitive String 操作を参照してください。

ユーザーに直接表示されませんデータを格納
Persisting Data The InvariantCulture property is useful for 

。文化に依存しない形式で データを格納すると、 が変更されない既知の形式が保証されます。異なる文化のユーザーがデータにアクセスする場合、 は特定のユーザーに基づいて適切にフォーマットできます。たとえば、 アプリケーションでDateTime型をテキストファイルに保存し、不変のカルチャに対して という形式を使用する場合は、 という文字列を格納するToStringを呼び出し、文字列を取得するためのParseメソッドを呼び出すときに、アプリケーションは InvariantCultureプロパティを使用する必要があります。この方法では の のデータを異なる文化のユーザーが読み書きすると、DateTime型の基になる値が変更されないことが保証されます。

+0

ありがとうございます!私はこの作品をチェックする必要があります... – MajesticRa

関連する問題