Ce problème peut être partiellement contourné. Le Cadre de l'exception de code charge les messages d'erreur à partir de ses ressources, basé sur le thread en cours de paramètres régionaux. Dans le cas de certaines exceptions, cela arrive au moment où le Message de la propriété est accessible.
Pour ces exceptions, vous pouvez obtenir la version anglaise du message par brièvement la commutation de la thread de la locale fr-fr pendant l'enregistrement (enregistrement de l'utilisateur d'origine locale à l'avance et de les restaurer immédiatement par la suite).
Faire cela sur un thread séparé, c'est encore mieux: cela vous assure il n'y aura aucun effets secondaires. Par exemple:
try
{
System.IO.StreamReader sr=new System.IO.StreamReader(@"c:\does-not-exist");
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString()); //Will display localized message
ExceptionLogger el = new ExceptionLogger(ex);
System.Threading.Thread t = new System.Threading.Thread(el.DoLog);
t.CurrentUICulture = new System.Globalization.CultureInfo("en-US");
t.Start();
}
Où la ExceptionLogger de classe ressemble à quelque chose comme:
class ExceptionLogger
{
Exception _ex;
public ExceptionLogger(Exception ex)
{
_ex = ex;
}
public void DoLog()
{
Console.WriteLine(_ex.ToString()); //Will display en-US message
}
}
Cependant, comme Joe correctement le souligne dans un commentaire sur une version antérieure de cette réponse, certains messages sont déjà (partiellement) chargé à partir de la langue de ressources au moment de l'exception est levée.
Cela s'applique à la "paramètre ne peut pas être null' une partie du message est émis quand un ArgumentNullException("foo") exception est levée, par exemple. Dans ces cas, le message apparaît toujours (partiellement), localisées, même lorsque vous utilisez le code ci-dessus.
Autres que par l'utilisation peu pratique hacks, telles que l'exécution de tous vos non-code de l'INTERFACE utilisateur sur un thread avec régionaux en-US pour commencer, il ne semble pas être beaucoup que vous pouvez faire à ce sujet: le .NET Framework code d'exception n'a pas d'installations pour annuler le message d'erreur locale.