AppSettings.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // <copyright>
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace System.Runtime.Serialization
  5. {
  6. using System;
  7. using System.Collections.Specialized;
  8. using System.Configuration;
  9. using System.Diagnostics.CodeAnalysis;
  10. using System.Security.Permissions;
  11. static class AppSettings
  12. {
  13. internal const string MaxMimePartsAppSettingsString = "microsoft:xmldictionaryreader:maxmimeparts";
  14. const int DefaultMaxMimeParts = 1000;
  15. static int maxMimeParts;
  16. static volatile bool settingsInitalized = false;
  17. static object appSettingsLock = new object();
  18. internal static int MaxMimeParts
  19. {
  20. get
  21. {
  22. EnsureSettingsLoaded();
  23. return maxMimeParts;
  24. }
  25. }
  26. [SuppressMessage(FxCop.Category.ReliabilityBasic, "Reliability104:CaughtAndHandledExceptionsRule",
  27. Justification = "Handle the configuration exceptions here to avoid regressions on customer's existing scenarios")]
  28. static void EnsureSettingsLoaded()
  29. {
  30. if (!settingsInitalized)
  31. {
  32. lock (appSettingsLock)
  33. {
  34. if (!settingsInitalized)
  35. {
  36. NameValueCollection appSettingsSection = null;
  37. #if !NO_CONFIGURATION
  38. try
  39. {
  40. appSettingsSection = ConfigurationManager.AppSettings;
  41. }
  42. catch (ConfigurationErrorsException)
  43. {
  44. }
  45. finally
  46. {
  47. #endif
  48. if ((appSettingsSection == null) || !int.TryParse(appSettingsSection[MaxMimePartsAppSettingsString], out maxMimeParts))
  49. {
  50. maxMimeParts = DefaultMaxMimeParts;
  51. }
  52. settingsInitalized = true;
  53. #if !NO_CONFIGURATION
  54. }
  55. #endif
  56. }
  57. }
  58. }
  59. }
  60. }
  61. }