diff --git a/Directory.Build.targets b/Directory.Build.targets
index 3b02169fa..e384275fd 100644
--- a/Directory.Build.targets
+++ b/Directory.Build.targets
@@ -1,4 +1,12 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eng/CodeAnalysis.src.globalconfig b/eng/CodeAnalysis.src.globalconfig
new file mode 100644
index 000000000..5ec982ac5
--- /dev/null
+++ b/eng/CodeAnalysis.src.globalconfig
@@ -0,0 +1,1918 @@
+is_global = true
+
+# AD0001: Analyzer threw an exception
+dotnet_diagnostic.AD0001.severity = warning
+
+# BCL0001: Ensure minimum API surface is respected
+dotnet_diagnostic.BCL0001.severity = warning
+
+# BCL0010: AppContext default value expected to be true
+dotnet_diagnostic.BCL0010.severity = warning
+
+# BCL0011: AppContext default value defined in if statement with incorrect pattern
+dotnet_diagnostic.BCL0011.severity = warning
+
+# BCL0012: AppContext default value defined in if statement at root of switch case
+dotnet_diagnostic.BCL0012.severity = warning
+
+# BCL0015: Invalid P/Invoke call
+dotnet_diagnostic.BCL0015.severity = none
+
+# BCL0020: Invalid SR.Format call
+dotnet_diagnostic.BCL0020.severity = warning
+
+# SYSLIB1045: Convert to 'GeneratedRegexAttribute'.
+dotnet_diagnostic.SYSLIB1045.severity = warning
+
+# SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time
+dotnet_diagnostic.SYSLIB1054.severity = warning
+
+# SYSLIB1055: Invalid 'CustomMarshallerAttribute' usage
+dotnet_diagnostic.SYSLIB1055.severity = error
+
+# SYSLIB1056:Specified marshaller type is invalid
+dotnet_diagnostic.SYSLIB1056.severity = error
+
+# SYSLIB1057: Marshaller type does not have the required shape
+dotnet_diagnostic.SYSLIB1057.severity = error
+
+# SYSLIB1058: Invalid 'NativeMarshallingAttribute' usage
+dotnet_diagnostic.SYSLIB1058.severity = error
+
+# SYSLIB1060: Specified marshaller type is invalid
+dotnet_diagnostic.SYSLIB1060.severity = error
+
+# SYSLIB1061: Marshaller type has incompatible method signatures
+dotnet_diagnostic.SYSLIB1061.severity = error
+
+# CA1000: Do not declare static members on generic types
+dotnet_diagnostic.CA1000.severity = none
+
+# CA1001: Types that own disposable fields should be disposable
+dotnet_diagnostic.CA1001.severity = none
+
+# CA1002: Do not expose generic lists
+dotnet_diagnostic.CA1002.severity = none
+
+# CA1003: Use generic event handler instances
+dotnet_diagnostic.CA1003.severity = none
+
+# CA1005: Avoid excessive parameters on generic types
+dotnet_diagnostic.CA1005.severity = none
+
+# CA1008: Enums should have zero value
+dotnet_diagnostic.CA1008.severity = none
+
+# CA1010: Generic interface should also be implemented
+dotnet_diagnostic.CA1010.severity = none
+
+# CA1012: Abstract types should not have public constructors
+dotnet_diagnostic.CA1012.severity = none
+
+# CA1014: Mark assemblies with CLSCompliant
+dotnet_diagnostic.CA1014.severity = none
+
+# CA1016: Mark assemblies with assembly version
+dotnet_diagnostic.CA1016.severity = none
+
+# CA1017: Mark assemblies with ComVisible
+dotnet_diagnostic.CA1017.severity = none
+
+# CA1018: Mark attributes with AttributeUsageAttribute
+dotnet_diagnostic.CA1018.severity = warning
+
+# CA1019: Define accessors for attribute arguments
+dotnet_diagnostic.CA1019.severity = none
+
+# CA1021: Avoid out parameters
+dotnet_diagnostic.CA1021.severity = none
+
+# CA1024: Use properties where appropriate
+dotnet_diagnostic.CA1024.severity = none
+
+# CA1027: Mark enums with FlagsAttribute
+dotnet_diagnostic.CA1027.severity = none
+
+# CA1028: Enum Storage should be Int32
+dotnet_diagnostic.CA1028.severity = none
+
+# CA1030: Use events where appropriate
+dotnet_diagnostic.CA1030.severity = none
+
+# CA1031: Do not catch general exception types
+dotnet_diagnostic.CA1031.severity = none
+
+# CA1032: Implement standard exception constructors
+dotnet_diagnostic.CA1032.severity = none
+
+# CA1033: Interface methods should be callable by child types
+dotnet_diagnostic.CA1033.severity = none
+
+# CA1034: Nested types should not be visible
+dotnet_diagnostic.CA1034.severity = none
+
+# CA1036: Override methods on comparable types
+dotnet_diagnostic.CA1036.severity = none
+
+# CA1040: Avoid empty interfaces
+dotnet_diagnostic.CA1040.severity = none
+
+# CA1041: Provide ObsoleteAttribute message
+dotnet_diagnostic.CA1041.severity = none
+
+# CA1043: Use Integral Or String Argument For Indexers
+dotnet_diagnostic.CA1043.severity = none
+
+# CA1044: Properties should not be write only
+dotnet_diagnostic.CA1044.severity = none
+
+# CA1045: Do not pass types by reference
+dotnet_diagnostic.CA1045.severity = none
+
+# CA1046: Do not overload equality operator on reference types
+dotnet_diagnostic.CA1046.severity = none
+
+# CA1047: Do not declare protected member in sealed type
+dotnet_diagnostic.CA1047.severity = warning
+
+# CA1050: Declare types in namespaces
+dotnet_diagnostic.CA1050.severity = warning
+
+# CA1051: Do not declare visible instance fields
+dotnet_diagnostic.CA1051.severity = none
+
+# CA1052: Static holder types should be Static or NotInheritable
+dotnet_diagnostic.CA1052.severity = warning
+dotnet_code_quality.CA1052.api_surface = private, internal
+
+# CA1054: URI-like parameters should not be strings
+dotnet_diagnostic.CA1054.severity = none
+
+# CA1055: URI-like return values should not be strings
+dotnet_diagnostic.CA1055.severity = none
+
+# CA1056: URI-like properties should not be strings
+dotnet_diagnostic.CA1056.severity = none
+
+# CA1058: Types should not extend certain base types
+dotnet_diagnostic.CA1058.severity = none
+
+# CA1060: Move pinvokes to native methods class
+dotnet_diagnostic.CA1060.severity = none
+
+# CA1061: Do not hide base class methods
+dotnet_diagnostic.CA1061.severity = none
+
+# CA1062: Validate arguments of public methods
+dotnet_diagnostic.CA1062.severity = none
+
+# CA1063: Implement IDisposable Correctly
+dotnet_diagnostic.CA1063.severity = none
+
+# CA1064: Exceptions should be public
+dotnet_diagnostic.CA1064.severity = none
+
+# CA1065: Do not raise exceptions in unexpected locations
+dotnet_diagnostic.CA1065.severity = none
+
+# CA1066: Implement IEquatable when overriding Object.Equals
+dotnet_diagnostic.CA1066.severity = warning
+
+# CA1067: Override Object.Equals(object) when implementing IEquatable
+dotnet_diagnostic.CA1067.severity = warning
+
+# CA1068: CancellationToken parameters must come last
+dotnet_diagnostic.CA1068.severity = none
+
+# CA1069: Enums values should not be duplicated
+dotnet_diagnostic.CA1069.severity = none
+
+# CA1070: Do not declare event fields as virtual
+dotnet_diagnostic.CA1070.severity = suggestion
+
+# CA1200: Avoid using cref tags with a prefix
+dotnet_diagnostic.CA1200.severity = suggestion
+
+# CA1303: Do not pass literals as localized parameters
+dotnet_diagnostic.CA1303.severity = none
+
+# CA1304: Specify CultureInfo
+dotnet_diagnostic.CA1304.severity = none
+
+# CA1305: Specify IFormatProvider
+dotnet_diagnostic.CA1305.severity = none
+
+# CA1307: Specify StringComparison for clarity
+dotnet_diagnostic.CA1307.severity = none
+
+# CA1308: Normalize strings to uppercase
+dotnet_diagnostic.CA1308.severity = none
+
+# CA1309: Use ordinal string comparison
+dotnet_diagnostic.CA1309.severity = none
+
+# CA1310: Specify StringComparison for correctness
+dotnet_diagnostic.CA1310.severity = suggestion
+
+# CA1311: Specify a culture or use an invariant version
+dotnet_diagnostic.CA1311.severity = warning
+
+# CA1401: P/Invokes should not be visible
+dotnet_diagnostic.CA1401.severity = warning
+
+# CA1416: Validate platform compatibility
+dotnet_diagnostic.CA1416.severity = warning
+
+# CA1417: Do not use 'OutAttribute' on string parameters for P/Invokes
+dotnet_diagnostic.CA1417.severity = warning
+
+# CA1418: Use valid platform string
+dotnet_diagnostic.CA1418.severity = warning
+
+# CA1419: Provide a parameterless constructor that is as visible as the containing type for concrete types derived from 'System.Runtime.InteropServices.SafeHandle'
+dotnet_diagnostic.CA1419.severity = warning
+
+# CA1420: Property, type, or attribute requires runtime marshalling
+dotnet_diagnostic.CA1420.severity = warning
+
+# CA1421: This method uses runtime marshalling even when the 'DisableRuntimeMarshallingAttribute' is applied
+dotnet_diagnostic.CA1421.severity = suggestion
+
+# CA1422: Validate platform compatibility
+dotnet_diagnostic.CA1422.severity = warning
+
+# CA1501: Avoid excessive inheritance
+dotnet_diagnostic.CA1501.severity = none
+
+# CA1502: Avoid excessive complexity
+dotnet_diagnostic.CA1502.severity = none
+
+# CA1505: Avoid unmaintainable code
+dotnet_diagnostic.CA1505.severity = none
+
+# CA1506: Avoid excessive class coupling
+dotnet_diagnostic.CA1506.severity = none
+
+# CA1507: Use nameof to express symbol names
+dotnet_diagnostic.CA1507.severity = warning
+
+# CA1508: Avoid dead conditional code
+dotnet_diagnostic.CA1508.severity = none
+
+# CA1509: Invalid entry in code metrics rule specification file
+dotnet_diagnostic.CA1509.severity = none
+
+# CA1510: Use ArgumentNullException throw helper
+# dotnet_diagnostic.CA1510.severity = warning
+
+# CA1511: Use ArgumentException throw helper
+dotnet_diagnostic.CA1511.severity = warning
+
+# CA1512: Use ArgumentOutOfRangeException throw helper
+dotnet_diagnostic.CA1512.severity = warning
+
+# CA1513: Use ObjectDisposedException throw helper
+dotnet_diagnostic.CA1513.severity = warning
+
+# CA1514: Avoid redundant length argument
+dotnet_diagnostic.CA1514.severity = warning
+
+# CA1515: Consider making public types internal
+dotnet_diagnostic.CA1515.severity = none
+
+# CA1700: Do not name enum values 'Reserved'
+dotnet_diagnostic.CA1700.severity = none
+
+# CA1707: Identifiers should not contain underscores
+dotnet_diagnostic.CA1707.severity = none
+
+# CA1708: Identifiers should differ by more than case
+dotnet_diagnostic.CA1708.severity = none
+
+# CA1710: Identifiers should have correct suffix
+dotnet_diagnostic.CA1710.severity = none
+
+# CA1711: Identifiers should not have incorrect suffix
+dotnet_diagnostic.CA1711.severity = none
+
+# CA1712: Do not prefix enum values with type name
+dotnet_diagnostic.CA1712.severity = none
+
+# CA1713: Events should not have 'Before' or 'After' prefix
+dotnet_diagnostic.CA1713.severity = none
+
+# CA1715: Identifiers should have correct prefix
+dotnet_diagnostic.CA1715.severity = none
+
+# CA1716: Identifiers should not match keywords
+dotnet_diagnostic.CA1716.severity = none
+
+# CA1720: Identifier contains type name
+dotnet_diagnostic.CA1720.severity = none
+
+# CA1721: Property names should not match get methods
+dotnet_diagnostic.CA1721.severity = none
+
+# CA1724: Type names should not match namespaces
+dotnet_diagnostic.CA1724.severity = none
+
+# CA1725: Parameter names should match base declaration
+dotnet_diagnostic.CA1725.severity = suggestion
+
+# CA1727: Use PascalCase for named placeholders
+# dotnet_diagnostic.CA1727.severity = warning
+
+# CA1802: Use literals where appropriate
+dotnet_diagnostic.CA1802.severity = warning
+dotnet_code_quality.CA1802.api_surface = private, internal
+
+# CA1805: Do not initialize unnecessarily
+dotnet_diagnostic.CA1805.severity = warning
+
+# CA1806: Do not ignore method results
+dotnet_diagnostic.CA1806.severity = none
+
+# CA1810: Initialize reference type static fields inline
+dotnet_diagnostic.CA1810.severity = warning
+
+# CA1812: Avoid uninstantiated internal classes
+dotnet_diagnostic.CA1812.severity = none
+
+# CA1813: Avoid unsealed attributes
+dotnet_diagnostic.CA1813.severity = none
+
+# CA1814: Prefer jagged arrays over multidimensional
+dotnet_diagnostic.CA1814.severity = none
+
+# CA1815: Override equals and operator equals on value types
+dotnet_diagnostic.CA1815.severity = none
+
+# CA1816: Dispose methods should call SuppressFinalize
+dotnet_diagnostic.CA1816.severity = none
+
+# CA1819: Properties should not return arrays
+dotnet_diagnostic.CA1819.severity = none
+
+# CA1820: Test for empty strings using string length
+dotnet_diagnostic.CA1820.severity = suggestion
+
+# CA1821: Remove empty Finalizers
+dotnet_diagnostic.CA1821.severity = warning
+
+# CA1822: Mark members as static
+dotnet_diagnostic.CA1822.severity = warning
+dotnet_code_quality.CA1822.api_surface = private, internal
+
+# CA1823: Avoid unused private fields
+dotnet_diagnostic.CA1823.severity = warning
+
+# CA1824: Mark assemblies with NeutralResourcesLanguageAttribute
+dotnet_diagnostic.CA1824.severity = warning
+
+# CA1825: Avoid zero-length array allocations
+dotnet_diagnostic.CA1825.severity = warning
+
+# CA1826: Do not use Enumerable methods on indexable collections
+dotnet_diagnostic.CA1826.severity = warning
+
+# CA1827: Do not use Count() or LongCount() when Any() can be used
+dotnet_diagnostic.CA1827.severity = warning
+
+# CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
+dotnet_diagnostic.CA1828.severity = warning
+
+# CA1829: Use Length/Count property instead of Count() when available
+dotnet_diagnostic.CA1829.severity = warning
+
+# CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder
+dotnet_diagnostic.CA1830.severity = warning
+
+# CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1831.severity = warning
+
+# CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1832.severity = warning
+
+# CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1833.severity = warning
+
+# CA1834: Consider using 'StringBuilder.Append(char)' when applicable
+dotnet_diagnostic.CA1834.severity = warning
+
+# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
+dotnet_diagnostic.CA1835.severity = warning
+
+# CA1836: Prefer IsEmpty over Count
+dotnet_diagnostic.CA1836.severity = warning
+
+# CA1837: Use 'Environment.ProcessId'
+dotnet_diagnostic.CA1837.severity = warning
+
+# CA1838: Avoid 'StringBuilder' parameters for P/Invokes
+dotnet_diagnostic.CA1838.severity = warning
+
+# CA1839: Use 'Environment.ProcessPath'
+dotnet_diagnostic.CA1839.severity = warning
+
+# CA1840: Use 'Environment.CurrentManagedThreadId'
+dotnet_diagnostic.CA1840.severity = warning
+
+# CA1841: Prefer Dictionary.Contains methods
+dotnet_diagnostic.CA1841.severity = warning
+
+# CA1842: Do not use 'WhenAll' with a single task
+dotnet_diagnostic.CA1842.severity = warning
+
+# CA1843: Do not use 'WaitAll' with a single task
+dotnet_diagnostic.CA1843.severity = warning
+
+# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
+dotnet_diagnostic.CA1844.severity = warning
+
+# CA1845: Use span-based 'string.Concat'
+dotnet_diagnostic.CA1845.severity = warning
+
+# CA1846: Prefer 'AsSpan' over 'Substring'
+dotnet_diagnostic.CA1846.severity = warning
+
+# CA1847: Use char literal for a single character lookup
+dotnet_diagnostic.CA1847.severity = warning
+
+# CA1848: Use the LoggerMessage delegates
+dotnet_diagnostic.CA1848.severity = none
+
+# CA1849: Call async methods when in an async method
+dotnet_diagnostic.CA1849.severity = suggestion
+
+# CA1850: Prefer static 'HashData' method over 'ComputeHash'
+dotnet_diagnostic.CA1850.severity = warning
+
+# CA1851: Possible multiple enumerations of 'IEnumerable' collection
+dotnet_diagnostic.CA1851.severity = suggestion
+
+# CA1852: Seal internal types
+dotnet_diagnostic.CA1852.severity = warning
+
+# CA1853: Unnecessary call to 'Dictionary.ContainsKey(key)'
+dotnet_diagnostic.CA1853.severity = warning
+
+# CA1854: Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method
+dotnet_diagnostic.CA1854.severity = warning
+
+# CA1855: Prefer 'Clear' over 'Fill'
+dotnet_diagnostic.CA1855.severity = warning
+
+# CA1856: Incorrect usage of ConstantExpected attribute
+dotnet_diagnostic.CA1856.severity = error
+
+# CA1857: A constant is expected for the parameter
+dotnet_diagnostic.CA1857.severity = warning
+
+# CA1858: Use 'StartsWith' instead of 'IndexOf'
+dotnet_diagnostic.CA1858.severity = warning
+
+# CA1859: Use concrete types when possible for improved performance
+dotnet_diagnostic.CA1859.severity = warning
+
+# CA1860: Avoid using 'Enumerable.Any()' extension method
+dotnet_diagnostic.CA1860.severity = warning
+
+# CA1861: Avoid constant arrays as arguments
+dotnet_diagnostic.CA1861.severity = warning
+
+# CA1862: Prefer using 'StringComparer'/'StringComparison' to perform case-insensitive string comparisons
+dotnet_diagnostic.CA1862.severity = suggestion
+
+# CA1863: Use 'CompositeFormat'
+dotnet_diagnostic.CA1863.severity = suggestion
+
+# CA1864: Prefer the 'IDictionary.TryAdd(TKey, TValue)' method
+dotnet_diagnostic.CA1864.severity = warning
+
+# CA1865: Use char overload
+dotnet_diagnostic.CA1865.severity = warning
+
+# CA1866: Use char overload
+dotnet_diagnostic.CA1866.severity = warning
+
+# CA1867: Use char overload
+dotnet_diagnostic.CA1867.severity = warning
+
+# CA1868: Unnecessary call to 'Contains' for sets
+dotnet_diagnostic.CA1868.severity = warning
+
+# CA1869: Cache and reuse 'JsonSerializerOptions' instances
+dotnet_diagnostic.CA1869.severity = warning
+
+# CA1870: Use a cached 'SearchValues' instance
+dotnet_diagnostic.CA1870.severity = warning
+
+# CA1871: Do not pass a nullable struct to 'ArgumentNullException.ThrowIfNull'
+dotnet_diagnostic.CA1871.severity = warning
+
+# CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString'
+dotnet_diagnostic.CA1872.severity = warning
+
+# CA2000: Dispose objects before losing scope
+dotnet_diagnostic.CA2000.severity = none
+
+# CA2002: Do not lock on objects with weak identity
+dotnet_diagnostic.CA2002.severity = none
+
+# CA2007: Consider calling ConfigureAwait on the awaited task
+# dotnet_diagnostic.CA2007.severity = warning
+
+# CA2008: Do not create tasks without passing a TaskScheduler
+dotnet_diagnostic.CA2008.severity = warning
+
+# CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
+dotnet_diagnostic.CA2009.severity = warning
+
+# CA2011: Avoid infinite recursion
+dotnet_diagnostic.CA2011.severity = warning
+
+# CA2012: Use ValueTasks correctly
+dotnet_diagnostic.CA2012.severity = warning
+
+# CA2013: Do not use ReferenceEquals with value types
+dotnet_diagnostic.CA2013.severity = warning
+
+# CA2014: Do not use stackalloc in loops
+dotnet_diagnostic.CA2014.severity = warning
+
+# CA2015: Do not define finalizers for types derived from MemoryManager
+dotnet_diagnostic.CA2015.severity = warning
+
+# CA2016: Forward the 'CancellationToken' parameter to methods
+dotnet_diagnostic.CA2016.severity = warning
+
+# CA2017: Parameter count mismatch
+dotnet_diagnostic.CA2017.severity = warning
+
+# CA2018: 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument
+dotnet_diagnostic.CA2018.severity = warning
+
+# CA2019: Improper 'ThreadStatic' field initialization
+dotnet_diagnostic.CA2019.severity = warning
+
+# CA2020: Prevent behavioral change
+dotnet_diagnostic.CA2020.severity = warning
+
+# CA2021: Do not call Enumerable.Cast or Enumerable.OfType with incompatible types
+dotnet_diagnostic.CA2021.severity = warning
+
+# CA2022: Avoid inexact read with 'Stream.Read'
+dotnet_diagnostic.CA2022.severity = warning
+
+# CA2100: Review SQL queries for security vulnerabilities
+dotnet_diagnostic.CA2100.severity = none
+
+# CA2101: Specify marshaling for P/Invoke string arguments
+dotnet_diagnostic.CA2101.severity = none
+
+# CA2119: Seal methods that satisfy private interfaces
+dotnet_diagnostic.CA2119.severity = none
+
+# CA2153: Do Not Catch Corrupted State Exceptions
+dotnet_diagnostic.CA2153.severity = none
+
+# CA2200: Rethrow to preserve stack details
+dotnet_diagnostic.CA2200.severity = warning
+
+# CA2201: Do not raise reserved exception types
+dotnet_diagnostic.CA2201.severity = none
+
+# CA2207: Initialize value type static fields inline
+dotnet_diagnostic.CA2207.severity = warning
+
+# CA2208: Instantiate argument exceptions correctly
+dotnet_diagnostic.CA2208.severity = warning
+dotnet_code_quality.CA2208.api_surface = public
+
+# CA2211: Non-constant fields should not be visible
+dotnet_diagnostic.CA2211.severity = none
+
+# CA2213: Disposable fields should be disposed
+dotnet_diagnostic.CA2213.severity = none
+
+# CA2214: Do not call overridable methods in constructors
+dotnet_diagnostic.CA2214.severity = none
+
+# CA2215: Dispose methods should call base class dispose
+dotnet_diagnostic.CA2215.severity = none
+
+# CA2216: Disposable types should declare finalizer
+dotnet_diagnostic.CA2216.severity = none
+
+# CA2217: Do not mark enums with FlagsAttribute
+dotnet_diagnostic.CA2217.severity = none
+
+# CA2218: Override GetHashCode on overriding Equals
+dotnet_diagnostic.CA2218.severity = none
+
+# CA2219: Do not raise exceptions in finally clauses
+dotnet_diagnostic.CA2219.severity = none
+
+# CA2224: Override Equals on overloading operator equals
+dotnet_diagnostic.CA2224.severity = none
+
+# CA2225: Operator overloads have named alternates
+dotnet_diagnostic.CA2225.severity = none
+
+# CA2226: Operators should have symmetrical overloads
+dotnet_diagnostic.CA2226.severity = none
+
+# CA2227: Collection properties should be read only
+dotnet_diagnostic.CA2227.severity = none
+
+# CA2231: Overload operator equals on overriding value type Equals
+dotnet_diagnostic.CA2231.severity = none
+
+# CA2234: Pass system uri objects instead of strings
+dotnet_diagnostic.CA2234.severity = none
+
+# CA2235: Mark all non-serializable fields
+dotnet_diagnostic.CA2235.severity = none
+
+# CA2237: Mark ISerializable types with serializable
+dotnet_diagnostic.CA2237.severity = none
+
+# CA2241: Provide correct arguments to formatting methods
+dotnet_diagnostic.CA2241.severity = warning
+
+# CA2242: Test for NaN correctly
+dotnet_diagnostic.CA2242.severity = warning
+
+# CA2243: Attribute string literals should parse correctly
+dotnet_diagnostic.CA2243.severity = warning
+
+# CA2244: Do not duplicate indexed element initializations
+dotnet_diagnostic.CA2244.severity = warning
+
+# CA2245: Do not assign a property to itself
+dotnet_diagnostic.CA2245.severity = warning
+
+# CA2246: Assigning symbol and its member in the same statement
+dotnet_diagnostic.CA2246.severity = warning
+
+# CA2247: Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum
+dotnet_diagnostic.CA2247.severity = warning
+
+# CA2248: Provide correct 'enum' argument to 'Enum.HasFlag'
+dotnet_diagnostic.CA2248.severity = warning
+
+# CA2249: Consider using 'string.Contains' instead of 'string.IndexOf'
+dotnet_diagnostic.CA2249.severity = warning
+
+# CA2250: Use 'ThrowIfCancellationRequested'
+dotnet_diagnostic.CA2250.severity = warning
+
+# CA2251: Use 'string.Equals'
+dotnet_diagnostic.CA2251.severity = warning
+
+# CA2252: This API requires opting into preview features
+dotnet_diagnostic.CA2252.severity = error
+
+# CA2253: Named placeholders should not be numeric values
+dotnet_diagnostic.CA2253.severity = warning
+
+# CA2254: Template should be a static expression
+dotnet_diagnostic.CA2254.severity = none
+
+# CA2255: The 'ModuleInitializer' attribute should not be used in libraries
+dotnet_diagnostic.CA2255.severity = warning
+
+# CA2256: All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface
+dotnet_diagnostic.CA2256.severity = warning
+
+# CA2257: Members defined on an interface with the 'DynamicInterfaceCastableImplementationAttribute' should be 'static'
+dotnet_diagnostic.CA2257.severity = warning
+
+# CA2258: Providing a 'DynamicInterfaceCastableImplementation' interface in Visual Basic is unsupported
+dotnet_diagnostic.CA2258.severity = warning
+
+# CA2259: 'ThreadStatic' only affects static fields
+dotnet_diagnostic.CA2259.severity = warning
+
+# CA2260: Use correct type parameter
+dotnet_diagnostic.CA2260.severity = warning
+
+# CA2261: Do not use ConfigureAwaitOptions.SuppressThrowing with Task
+dotnet_diagnostic.CA2261.severity = warning
+
+# CA2262: Set 'MaxResponseHeadersLength' properly
+dotnet_diagnostic.CA2262.severity = warning
+
+# CA2263: Prefer generic overload when type is known
+dotnet_diagnostic.CA2263.severity = suggestion
+
+# CA2264: Do not pass a non-nullable value to 'ArgumentNullException.ThrowIfNull'
+dotnet_diagnostic.CA2264.severity = warning
+
+# CA2265: Do not compare Span to 'null' or 'default'
+dotnet_diagnostic.CA2265.severity = warning
+
+# CA2300: Do not use insecure deserializer BinaryFormatter
+dotnet_diagnostic.CA2300.severity = none
+
+# CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder
+dotnet_diagnostic.CA2301.severity = none
+
+# CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize
+dotnet_diagnostic.CA2302.severity = none
+
+# CA2305: Do not use insecure deserializer LosFormatter
+dotnet_diagnostic.CA2305.severity = none
+
+# CA2310: Do not use insecure deserializer NetDataContractSerializer
+dotnet_diagnostic.CA2310.severity = none
+
+# CA2311: Do not deserialize without first setting NetDataContractSerializer.Binder
+dotnet_diagnostic.CA2311.severity = none
+
+# CA2312: Ensure NetDataContractSerializer.Binder is set before deserializing
+dotnet_diagnostic.CA2312.severity = none
+
+# CA2315: Do not use insecure deserializer ObjectStateFormatter
+dotnet_diagnostic.CA2315.severity = none
+
+# CA2321: Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver
+dotnet_diagnostic.CA2321.severity = none
+
+# CA2322: Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing
+dotnet_diagnostic.CA2322.severity = none
+
+# CA2326: Do not use TypeNameHandling values other than None
+dotnet_diagnostic.CA2326.severity = none
+
+# CA2327: Do not use insecure JsonSerializerSettings
+dotnet_diagnostic.CA2327.severity = none
+
+# CA2328: Ensure that JsonSerializerSettings are secure
+dotnet_diagnostic.CA2328.severity = none
+
+# CA2329: Do not deserialize with JsonSerializer using an insecure configuration
+dotnet_diagnostic.CA2329.severity = none
+
+# CA2330: Ensure that JsonSerializer has a secure configuration when deserializing
+dotnet_diagnostic.CA2330.severity = none
+
+# CA2350: Do not use DataTable.ReadXml() with untrusted data
+dotnet_diagnostic.CA2350.severity = none
+
+# CA2351: Do not use DataSet.ReadXml() with untrusted data
+dotnet_diagnostic.CA2351.severity = none
+
+# CA2352: Unsafe DataSet or DataTable in serializable type can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2352.severity = none
+
+# CA2353: Unsafe DataSet or DataTable in serializable type
+dotnet_diagnostic.CA2353.severity = none
+
+# CA2354: Unsafe DataSet or DataTable in deserialized object graph can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2354.severity = none
+
+# CA2355: Unsafe DataSet or DataTable type found in deserializable object graph
+dotnet_diagnostic.CA2355.severity = none
+
+# CA2356: Unsafe DataSet or DataTable type in web deserializable object graph
+dotnet_diagnostic.CA2356.severity = none
+
+# CA2361: Ensure auto-generated class containing DataSet.ReadXml() is not used with untrusted data
+dotnet_diagnostic.CA2361.severity = none
+
+# CA2362: Unsafe DataSet or DataTable in auto-generated serializable type can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2362.severity = none
+
+# CA3001: Review code for SQL injection vulnerabilities
+dotnet_diagnostic.CA3001.severity = none
+
+# CA3002: Review code for XSS vulnerabilities
+dotnet_diagnostic.CA3002.severity = none
+
+# CA3003: Review code for file path injection vulnerabilities
+dotnet_diagnostic.CA3003.severity = none
+
+# CA3004: Review code for information disclosure vulnerabilities
+dotnet_diagnostic.CA3004.severity = none
+
+# CA3005: Review code for LDAP injection vulnerabilities
+dotnet_diagnostic.CA3005.severity = none
+
+# CA3006: Review code for process command injection vulnerabilities
+dotnet_diagnostic.CA3006.severity = none
+
+# CA3007: Review code for open redirect vulnerabilities
+dotnet_diagnostic.CA3007.severity = none
+
+# CA3008: Review code for XPath injection vulnerabilities
+dotnet_diagnostic.CA3008.severity = none
+
+# CA3009: Review code for XML injection vulnerabilities
+dotnet_diagnostic.CA3009.severity = none
+
+# CA3010: Review code for XAML injection vulnerabilities
+dotnet_diagnostic.CA3010.severity = none
+
+# CA3011: Review code for DLL injection vulnerabilities
+dotnet_diagnostic.CA3011.severity = none
+
+# CA3012: Review code for regex injection vulnerabilities
+dotnet_diagnostic.CA3012.severity = none
+
+# CA3061: Do Not Add Schema By URL
+dotnet_diagnostic.CA3061.severity = warning
+
+# CA3075: Insecure DTD processing in XML
+dotnet_diagnostic.CA3075.severity = warning
+
+# CA3076: Insecure XSLT script processing
+dotnet_diagnostic.CA3076.severity = warning
+
+# CA3077: Insecure Processing in API Design, XmlDocument and XmlTextReader
+dotnet_diagnostic.CA3077.severity = warning
+
+# CA3147: Mark Verb Handlers With Validate Antiforgery Token
+dotnet_diagnostic.CA3147.severity = warning
+
+# CA5350: Do Not Use Weak Cryptographic Algorithms
+dotnet_diagnostic.CA5350.severity = warning
+
+# CA5351: Do Not Use Broken Cryptographic Algorithms
+dotnet_diagnostic.CA5351.severity = warning
+
+# CA5358: Review cipher mode usage with cryptography experts
+dotnet_diagnostic.CA5358.severity = none
+
+# CA5359: Do Not Disable Certificate Validation
+dotnet_diagnostic.CA5359.severity = warning
+
+# CA5360: Do Not Call Dangerous Methods In Deserialization
+dotnet_diagnostic.CA5360.severity = warning
+
+# CA5361: Do Not Disable SChannel Use of Strong Crypto
+dotnet_diagnostic.CA5361.severity = warning
+
+# CA5362: Potential reference cycle in deserialized object graph
+dotnet_diagnostic.CA5362.severity = none
+
+# CA5363: Do Not Disable Request Validation
+dotnet_diagnostic.CA5363.severity = warning
+
+# CA5364: Do Not Use Deprecated Security Protocols
+dotnet_diagnostic.CA5364.severity = warning
+
+# CA5365: Do Not Disable HTTP Header Checking
+dotnet_diagnostic.CA5365.severity = warning
+
+# CA5366: Use XmlReader for 'DataSet.ReadXml()'
+dotnet_diagnostic.CA5366.severity = none
+
+# CA5367: Do Not Serialize Types With Pointer Fields
+dotnet_diagnostic.CA5367.severity = none
+
+# CA5368: Set ViewStateUserKey For Classes Derived From Page
+dotnet_diagnostic.CA5368.severity = warning
+
+# CA5369: Use XmlReader for 'XmlSerializer.Deserialize()'
+dotnet_diagnostic.CA5369.severity = none
+
+# CA5370: Use XmlReader for XmlValidatingReader constructor
+dotnet_diagnostic.CA5370.severity = warning
+
+# CA5371: Use XmlReader for 'XmlSchema.Read()'
+dotnet_diagnostic.CA5371.severity = none
+
+# CA5372: Use XmlReader for XPathDocument constructor
+dotnet_diagnostic.CA5372.severity = none
+
+# CA5373: Do not use obsolete key derivation function
+dotnet_diagnostic.CA5373.severity = warning
+
+# CA5374: Do Not Use XslTransform
+dotnet_diagnostic.CA5374.severity = warning
+
+# CA5375: Do Not Use Account Shared Access Signature
+dotnet_diagnostic.CA5375.severity = none
+
+# CA5376: Use SharedAccessProtocol HttpsOnly
+dotnet_diagnostic.CA5376.severity = warning
+
+# CA5377: Use Container Level Access Policy
+dotnet_diagnostic.CA5377.severity = warning
+
+# CA5378: Do not disable ServicePointManagerSecurityProtocols
+dotnet_diagnostic.CA5378.severity = warning
+
+# CA5379: Ensure Key Derivation Function algorithm is sufficiently strong
+dotnet_diagnostic.CA5379.severity = warning
+
+# CA5380: Do Not Add Certificates To Root Store
+dotnet_diagnostic.CA5380.severity = warning
+
+# CA5381: Ensure Certificates Are Not Added To Root Store
+dotnet_diagnostic.CA5381.severity = warning
+
+# CA5382: Use Secure Cookies In ASP.NET Core
+dotnet_diagnostic.CA5382.severity = none
+
+# CA5383: Ensure Use Secure Cookies In ASP.NET Core
+dotnet_diagnostic.CA5383.severity = none
+
+# CA5384: Do Not Use Digital Signature Algorithm (DSA)
+dotnet_diagnostic.CA5384.severity = warning
+
+# CA5385: Use Rivest-Shamir-Adleman (RSA) Algorithm With Sufficient Key Size
+dotnet_diagnostic.CA5385.severity = warning
+
+# CA5386: Avoid hardcoding SecurityProtocolType value
+dotnet_diagnostic.CA5386.severity = none
+
+# CA5387: Do Not Use Weak Key Derivation Function With Insufficient Iteration Count
+dotnet_diagnostic.CA5387.severity = none
+
+# CA5388: Ensure Sufficient Iteration Count When Using Weak Key Derivation Function
+dotnet_diagnostic.CA5388.severity = none
+
+# CA5389: Do Not Add Archive Item's Path To The Target File System Path
+dotnet_diagnostic.CA5389.severity = none
+
+# CA5390: Do not hard-code encryption key
+dotnet_diagnostic.CA5390.severity = none
+
+# CA5391: Use antiforgery tokens in ASP.NET Core MVC controllers
+dotnet_diagnostic.CA5391.severity = none
+
+# CA5392: Use DefaultDllImportSearchPaths attribute for P/Invokes
+dotnet_diagnostic.CA5392.severity = none
+
+# CA5393: Do not use unsafe DllImportSearchPath value
+dotnet_diagnostic.CA5393.severity = none
+
+# CA5394: Do not use insecure randomness
+dotnet_diagnostic.CA5394.severity = none
+
+# CA5395: Miss HttpVerb attribute for action methods
+dotnet_diagnostic.CA5395.severity = none
+
+# CA5396: Set HttpOnly to true for HttpCookie
+dotnet_diagnostic.CA5396.severity = none
+
+# CA5397: Do not use deprecated SslProtocols values
+dotnet_diagnostic.CA5397.severity = none
+
+# CA5398: Avoid hardcoded SslProtocols values
+dotnet_diagnostic.CA5398.severity = none
+
+# CA5399: HttpClients should enable certificate revocation list checks
+dotnet_diagnostic.CA5399.severity = none
+
+# CA5400: Ensure HttpClient certificate revocation list check is not disabled
+dotnet_diagnostic.CA5400.severity = none
+
+# CA5401: Do not use CreateEncryptor with non-default IV
+dotnet_diagnostic.CA5401.severity = none
+
+# CA5402: Use CreateEncryptor with the default IV
+dotnet_diagnostic.CA5402.severity = none
+
+# CA5403: Do not hard-code certificate
+dotnet_diagnostic.CA5403.severity = none
+
+# CA5404: Do not disable token validation checks
+dotnet_diagnostic.CA5404.severity = none
+
+# CA5405: Do not always skip token validation in delegates
+dotnet_diagnostic.CA5405.severity = none
+
+# IL3000: Avoid using accessing Assembly file path when publishing as a single-file
+dotnet_diagnostic.IL3000.severity = warning
+
+# IL3001: Avoid using accessing Assembly file path when publishing as a single-file
+dotnet_diagnostic.IL3001.severity = warning
+
+# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
+dotnet_diagnostic.IL3002.severity = warning
+
+# RS1001: Missing diagnostic analyzer attribute
+dotnet_diagnostic.RS1001.severity = warning
+
+# RS1002: Missing kind argument when registering an analyzer action
+dotnet_diagnostic.RS1002.severity = warning
+
+# RS1003: Unsupported SymbolKind argument when registering a symbol analyzer action
+dotnet_diagnostic.RS1003.severity = warning
+
+# RS1004: Recommend adding language support to diagnostic analyzer
+dotnet_diagnostic.RS1004.severity = warning
+
+# RS1005: ReportDiagnostic invoked with an unsupported DiagnosticDescriptor
+dotnet_diagnostic.RS1005.severity = warning
+
+# RS1006: Invalid type argument for DiagnosticAnalyzer's Register method
+dotnet_diagnostic.RS1006.severity = warning
+
+# RS1007: Provide localizable arguments to diagnostic descriptor constructor
+dotnet_diagnostic.RS1007.severity = none
+
+# RS1008: Avoid storing per-compilation data into the fields of a diagnostic analyzer
+dotnet_diagnostic.RS1008.severity = warning
+
+# RS1009: Only internal implementations of this interface are allowed
+dotnet_diagnostic.RS1009.severity = error
+
+# RS1010: Create code actions should have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1010.severity = warning
+
+# RS1011: Use code actions that have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1011.severity = warning
+
+# RS1012: Start action has no registered actions
+dotnet_diagnostic.RS1012.severity = warning
+
+# RS1013: Start action has no registered non-end actions
+dotnet_diagnostic.RS1013.severity = warning
+
+# RS1014: Do not ignore values returned by methods on immutable objects
+dotnet_diagnostic.RS1014.severity = warning
+
+# RS1015: Provide non-null 'helpLinkUri' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1015.severity = none
+
+# RS1016: Code fix providers should provide FixAll support
+dotnet_diagnostic.RS1016.severity = suggestion
+
+# RS1017: DiagnosticId for analyzers must be a non-null constant
+dotnet_diagnostic.RS1017.severity = warning
+
+# RS1018: DiagnosticId for analyzers must be in specified format
+dotnet_diagnostic.RS1018.severity = warning
+
+# RS1019: DiagnosticId must be unique across analyzers
+dotnet_diagnostic.RS1019.severity = warning
+
+# RS1020: Category for analyzers must be from the specified values
+dotnet_diagnostic.RS1020.severity = none
+
+# RS1021: Invalid entry in analyzer category and diagnostic ID range specification file
+dotnet_diagnostic.RS1021.severity = warning
+
+# RS1022: Do not use types from Workspaces assembly in an analyzer
+dotnet_diagnostic.RS1022.severity = warning
+
+# RS1023: Upgrade MSBuildWorkspace
+dotnet_diagnostic.RS1023.severity = warning
+
+# RS1024: Symbols should be compared for equality
+dotnet_diagnostic.RS1024.severity = warning
+
+# RS1025: Configure generated code analysis
+dotnet_diagnostic.RS1025.severity = warning
+
+# RS1026: Enable concurrent execution
+dotnet_diagnostic.RS1026.severity = warning
+
+# RS1027: Types marked with DiagnosticAnalyzerAttribute(s) should inherit from DiagnosticAnalyzer
+dotnet_diagnostic.RS1027.severity = warning
+
+# RS1028: Provide non-null 'customTags' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1028.severity = none
+
+# RS1029: Do not use reserved diagnostic IDs
+dotnet_diagnostic.RS1029.severity = warning
+
+# RS1030: Do not invoke Compilation.GetSemanticModel() method within a diagnostic analyzer
+dotnet_diagnostic.RS1030.severity = warning
+
+# RS1031: Define diagnostic title correctly
+dotnet_diagnostic.RS1031.severity = warning
+
+# RS1032: Define diagnostic message correctly
+dotnet_diagnostic.RS1032.severity = warning
+
+# RS1033: Define diagnostic description correctly
+dotnet_diagnostic.RS1033.severity = warning
+
+# RS1034: Prefer 'IsKind' for checking syntax kinds
+dotnet_diagnostic.RS1034.severity = warning
+
+# RS1035: Do not use APIs banned for analyzers
+dotnet_diagnostic.RS1035.severity = error
+
+# RS1036: Specify analyzer banned API enforcement setting
+dotnet_diagnostic.RS1036.severity = warning
+
+# RS1037: Add "CompilationEnd" custom tag to compilation end diagnostic descriptor
+dotnet_diagnostic.RS1037.severity = warning
+
+# RS1038: Compiler extensions should be implemented in assemblies with compiler-provided references
+dotnet_diagnostic.RS1038.severity = suggestion
+
+# RS2000: Add analyzer diagnostic IDs to analyzer release
+dotnet_diagnostic.RS2000.severity = warning
+
+# RS2001: Ensure up-to-date entry for analyzer diagnostic IDs are added to analyzer release
+dotnet_diagnostic.RS2001.severity = warning
+
+# RS2002: Do not add removed analyzer diagnostic IDs to unshipped analyzer release
+dotnet_diagnostic.RS2002.severity = warning
+
+# RS2003: Shipped diagnostic IDs that are no longer reported should have an entry in the 'Removed Rules' table in unshipped file
+dotnet_diagnostic.RS2003.severity = warning
+
+# RS2004: Diagnostic IDs marked as removed in analyzer release file should not be reported by analyzers
+dotnet_diagnostic.RS2004.severity = warning
+
+# RS2005: Remove duplicate entries for diagnostic ID in the same analyzer release
+dotnet_diagnostic.RS2005.severity = warning
+
+# RS2006: Remove duplicate entries for diagnostic ID between analyzer releases
+dotnet_diagnostic.RS2006.severity = warning
+
+# RS2007: Invalid entry in analyzer release file
+dotnet_diagnostic.RS2007.severity = warning
+
+# RS2008: Enable analyzer release tracking
+dotnet_diagnostic.RS2008.severity = warning
+
+# SA0001: XML comments
+dotnet_diagnostic.SA0001.severity = none
+
+# SA1000: Spacing around keywords
+# suggestion until https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3478 is resolved
+dotnet_diagnostic.SA1000.severity = suggestion
+
+# SA1001: Commas should not be preceded by whitespace
+dotnet_diagnostic.SA1001.severity = warning
+
+# SA1002: Semicolons should not be preceded by a space
+dotnet_diagnostic.SA1002.severity = none
+
+# SA1003: Operator should not appear at the end of a line
+dotnet_diagnostic.SA1003.severity = none
+
+# SA1004: Documentation line should begin with a space
+dotnet_diagnostic.SA1004.severity = none
+
+# SA1005: Single line comment should begin with a space
+dotnet_diagnostic.SA1005.severity = none
+
+# SA1008: Opening parenthesis should not be preceded by a space
+dotnet_diagnostic.SA1008.severity = none
+
+# SA1009: Closing parenthesis should not be followed by a space
+dotnet_diagnostic.SA1009.severity = none
+
+# SA1010: Opening square brackets should not be preceded by a space
+dotnet_diagnostic.SA1010.severity = none
+
+# SA1011: Closing square bracket should be followed by a space
+dotnet_diagnostic.SA1011.severity = none
+
+# SA1012: Opening brace should be followed by a space
+dotnet_diagnostic.SA1012.severity = none
+
+# SA1013: Closing brace should be preceded by a space
+dotnet_diagnostic.SA1013.severity = none
+
+# SA1014: Opening generic brackets should not be preceded by a space
+dotnet_diagnostic.SA1014.severity = warning
+
+# SA1015: Closing generic bracket should not be followed by a space
+dotnet_diagnostic.SA1015.severity = none
+
+# SA1018: Nullable type symbol should not be preceded by a space
+dotnet_diagnostic.SA1018.severity = warning
+
+# SA1020: Increment symbol should not be preceded by a space
+dotnet_diagnostic.SA1020.severity = warning
+
+# SA1021: Negative sign should be preceded by a space
+dotnet_diagnostic.SA1021.severity = none
+
+# SA1023: Dereference symbol '*' should not be preceded by a space."
+dotnet_diagnostic.SA1023.severity = none
+
+# SA1024: Colon should be followed by a space
+dotnet_diagnostic.SA1024.severity = none
+
+# SA1025: Code should not contain multiple whitespace characters in a row
+dotnet_diagnostic.SA1025.severity = none
+
+# SA1026: Keyword followed by span or blank line
+dotnet_diagnostic.SA1026.severity = warning
+
+# SA1027: Tabs and spaces should be used correctly
+dotnet_diagnostic.SA1027.severity = warning
+
+# SA1028: Code should not contain trailing whitespace
+dotnet_diagnostic.SA1028.severity = warning
+
+# SA1100: Do not prefix calls with base unless local implementation exists
+dotnet_diagnostic.SA1100.severity = none
+
+# SA1101: Prefix local calls with this
+dotnet_diagnostic.SA1101.severity = none
+
+# SA1102: Query clause should follow previous clause
+dotnet_diagnostic.SA1102.severity = warning
+
+# SA1105: Query clauses spanning multiple lines should begin on own line
+dotnet_diagnostic.SA1105.severity = warning
+
+# SA1106: Code should not contain empty statements
+dotnet_diagnostic.SA1106.severity = none
+
+# SA1107: Code should not contain multiple statements on one line
+dotnet_diagnostic.SA1107.severity = none
+
+# SA1108: Block statements should not contain embedded comments
+dotnet_diagnostic.SA1108.severity = none
+
+# SA1110: Opening parenthesis or bracket should be on declaration line
+dotnet_diagnostic.SA1110.severity = none
+
+# SA1111: Closing parenthesis should be on line of last parameter
+dotnet_diagnostic.SA1111.severity = none
+
+# SA1113: Comma should be on the same line as previous parameter
+dotnet_diagnostic.SA1113.severity = warning
+
+# SA1114: Parameter list should follow declaration
+dotnet_diagnostic.SA1114.severity = none
+
+# SA1115: Parameter should begin on the line after the previous parameter
+dotnet_diagnostic.SA1115.severity = warning
+
+# SA1116: Split parameters should start on line after declaration
+dotnet_diagnostic.SA1116.severity = none
+
+# SA1117: Parameters should be on same line or separate lines
+dotnet_diagnostic.SA1117.severity = none
+
+# SA1118: Parameter should not span multiple lines
+dotnet_diagnostic.SA1118.severity = none
+
+# SA1119: Statement should not use unnecessary parenthesis
+dotnet_diagnostic.SA1119.severity = none
+
+# SA1120: Comments should contain text
+dotnet_diagnostic.SA1120.severity = none
+
+# SA1121: Use built-in type alias
+dotnet_diagnostic.SA1121.severity = warning
+
+# SA1122: Use string.Empty for empty strings
+dotnet_diagnostic.SA1122.severity = none
+
+# SA1123: Region should not be located within a code element
+dotnet_diagnostic.SA1123.severity = none
+
+# SA1124: Do not use regions
+dotnet_diagnostic.SA1124.severity = none
+
+# SA1125: Use shorthand for nullable types
+dotnet_diagnostic.SA1125.severity = none
+
+# SA1127: Generic type constraints should be on their own line
+dotnet_diagnostic.SA1127.severity = none
+
+# SA1128: Put constructor initializers on their own line
+dotnet_diagnostic.SA1128.severity = none
+
+# SA1129: Do not use default value type constructor
+dotnet_diagnostic.SA1129.severity = warning
+
+# SA1130: Use lambda syntax
+dotnet_diagnostic.SA1130.severity = none
+
+# SA1131: Constant values should appear on the right-hand side of comparisons
+dotnet_diagnostic.SA1131.severity = none
+
+# SA1132: Do not combine fields
+dotnet_diagnostic.SA1132.severity = none
+
+# SA1133: Do not combine attributes
+dotnet_diagnostic.SA1133.severity = none
+
+# SA1134: Each attribute should be placed on its own line of code
+dotnet_diagnostic.SA1134.severity = none
+
+# SA1135: Using directive should be qualified
+dotnet_diagnostic.SA1135.severity = none
+
+# SA1136: Enum values should be on separate lines
+dotnet_diagnostic.SA1136.severity = warning
+
+# SA1137: Elements should have the same indentation
+dotnet_diagnostic.SA1137.severity = none
+
+# SA1139: Use literal suffix notation instead of casting
+dotnet_diagnostic.SA1139.severity = none
+
+# SA1141: Use tuple syntax
+dotnet_diagnostic.SA1141.severity = warning
+
+# SA1142: Refer to tuple elements by name
+dotnet_diagnostic.SA1142.severity = warning
+
+# SA1200: Using directive should appear within a namespace declaration
+dotnet_diagnostic.SA1200.severity = none
+
+# SA1201: Elements should appear in the correct order
+dotnet_diagnostic.SA1201.severity = none
+
+# SA1202: Elements should be ordered by access
+dotnet_diagnostic.SA1202.severity = none
+
+# SA1203: Constants should appear before fields
+dotnet_diagnostic.SA1203.severity = none
+
+# SA1204: Static elements should appear before instance elements
+dotnet_diagnostic.SA1204.severity = none
+
+# SA1205: Partial elements should declare an access modifier
+dotnet_diagnostic.SA1205.severity = warning
+
+# SA1206: Keyword ordering - TODO Re-enable as warning after https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3527
+dotnet_diagnostic.SA1206.severity = suggestion
+
+# SA1208: Using directive ordering
+dotnet_diagnostic.SA1208.severity = none
+
+# SA1209: Using alias directives should be placed after all using namespace directives
+dotnet_diagnostic.SA1209.severity = none
+
+# SA1210: Using directives should be ordered alphabetically by the namespaces
+dotnet_diagnostic.SA1210.severity = none
+
+# SA1211: Using alias directive ordering
+dotnet_diagnostic.SA1211.severity = none
+
+# SA1212: A get accessor appears after a set accessor within a property or indexer
+dotnet_diagnostic.SA1212.severity = warning
+
+# SA1214: Readonly fields should appear before non-readonly fields
+dotnet_diagnostic.SA1214.severity = none
+
+# SA1216: Using static directives should be placed at the correct location
+dotnet_diagnostic.SA1216.severity = none
+
+# SA1300: Element should begin with an uppercase letter
+dotnet_diagnostic.SA1300.severity = none
+
+# SA1302: Interface names should begin with I
+dotnet_diagnostic.SA1302.severity = warning
+
+# SA1303: Const field names should begin with upper-case letter
+dotnet_diagnostic.SA1303.severity = none
+
+# SA1304: Non-private readonly fields should begin with upper-case letter
+dotnet_diagnostic.SA1304.severity = none
+
+# SA1306: Field should begin with lower-case letter
+dotnet_diagnostic.SA1306.severity = none
+
+# SA1307: Field should begin with upper-case letter
+dotnet_diagnostic.SA1307.severity = none
+
+# SA1308: Field should not begin with the prefix 's_'
+dotnet_diagnostic.SA1308.severity = none
+
+# SA1309: Field names should not begin with underscore
+dotnet_diagnostic.SA1309.severity = none
+
+# SA1310: Field should not contain an underscore
+dotnet_diagnostic.SA1310.severity = none
+
+# SA1311: Static readonly fields should begin with upper-case letter
+dotnet_diagnostic.SA1311.severity = none
+
+# SA1312: Variable should begin with lower-case letter
+dotnet_diagnostic.SA1312.severity = none
+
+# SA1313: Parameter should begin with lower-case letter
+dotnet_diagnostic.SA1313.severity = none
+
+# SA1314: Type parameter names should begin with T
+dotnet_diagnostic.SA1314.severity = none
+
+# SA1316: Tuple element names should use correct casing
+dotnet_diagnostic.SA1316.severity = none
+
+# SA1400: Member should declare an access modifier
+dotnet_diagnostic.SA1400.severity = warning
+
+# SA1401: Fields should be private
+dotnet_diagnostic.SA1401.severity = none
+
+# SA1402: File may only contain a single type
+dotnet_diagnostic.SA1402.severity = none
+
+# SA1403: File may only contain a single namespace
+dotnet_diagnostic.SA1403.severity = none
+
+# SA1404: Code analysis suppression should have justification
+dotnet_diagnostic.SA1404.severity = warning
+
+# SA1405: Debug.Assert should provide message text
+dotnet_diagnostic.SA1405.severity = none
+
+# SA1407: Arithmetic expressions should declare precedence
+dotnet_diagnostic.SA1407.severity = none
+
+# SA1408: Conditional expressions should declare precedence
+dotnet_diagnostic.SA1408.severity = none
+
+# SA1410: Remove delegate parens when possible
+dotnet_diagnostic.SA1410.severity = warning
+
+# SA1411: Attribute constructor shouldn't use unnecessary parenthesis
+dotnet_diagnostic.SA1411.severity = warning
+
+# SA1413: Use trailing comma in multi-line initializers
+dotnet_diagnostic.SA1413.severity = none
+
+# SA1414: Tuple types in signatures should have element names
+dotnet_diagnostic.SA1414.severity = none
+
+# SA1500: Braces for multi-line statements should not share line
+dotnet_diagnostic.SA1500.severity = none
+
+# SA1501: Statement should not be on a single line
+dotnet_diagnostic.SA1501.severity = none
+
+# SA1502: Element should not be on a single line
+dotnet_diagnostic.SA1502.severity = none
+
+# SA1503: Braces should not be omitted
+dotnet_diagnostic.SA1503.severity = none
+
+# SA1504: All accessors should be single-line or multi-line
+dotnet_diagnostic.SA1504.severity = none
+
+# SA1505: An opening brace should not be followed by a blank line
+dotnet_diagnostic.SA1505.severity = none
+
+# SA1506: Element documentation headers should not be followed by blank line
+dotnet_diagnostic.SA1506.severity = none
+
+# SA1507: Code should not contain multiple blank lines in a row
+dotnet_diagnostic.SA1507.severity = none
+
+# SA1508: A closing brace should not be preceded by a blank line
+dotnet_diagnostic.SA1508.severity = none
+
+# SA1509: Opening braces should not be preceded by blank line
+dotnet_diagnostic.SA1509.severity = none
+
+# SA1510: 'else' statement should not be preceded by a blank line
+dotnet_diagnostic.SA1510.severity = none
+
+# SA1512: Single-line comments should not be followed by blank line
+dotnet_diagnostic.SA1512.severity = none
+
+# SA1513: Closing brace should be followed by blank line
+dotnet_diagnostic.SA1513.severity = none
+
+# SA1514: Element documentation header should be preceded by blank line
+dotnet_diagnostic.SA1514.severity = none
+
+# SA1515: Single-line comment should be preceded by blank line
+dotnet_diagnostic.SA1515.severity = none
+
+# SA1516: Elements should be separated by blank line
+dotnet_diagnostic.SA1516.severity = none
+
+# SA1517: Code should not contain blank lines at start of file
+dotnet_diagnostic.SA1517.severity = warning
+
+# SA1518: Code should not contain blank lines at the end of the file
+dotnet_diagnostic.SA1518.severity = warning
+
+# SA1519: Braces should not be omitted from multi-line child statement
+dotnet_diagnostic.SA1519.severity = none
+
+# SA1520: Use braces consistently
+dotnet_diagnostic.SA1520.severity = none
+
+# SA1600: Elements should be documented
+dotnet_diagnostic.SA1600.severity = none
+
+# SA1601: Partial elements should be documented
+dotnet_diagnostic.SA1601.severity = none
+
+# SA1602: Enumeration items should be documented
+dotnet_diagnostic.SA1602.severity = none
+
+# SA1604: Element documentation should have summary
+dotnet_diagnostic.SA1604.severity = none
+
+# SA1605: Partial element documentation should have summary
+dotnet_diagnostic.SA1605.severity = none
+
+# SA1606: Element documentation should have summary text
+dotnet_diagnostic.SA1606.severity = none
+
+# SA1608: Element documentation should not have default summary
+dotnet_diagnostic.SA1608.severity = none
+
+# SA1610: Property documentation should have value text
+dotnet_diagnostic.SA1610.severity = none
+
+# SA1611: The documentation for parameter 'message' is missing
+dotnet_diagnostic.SA1611.severity = none
+
+# SA1612: The parameter documentation is at incorrect position
+dotnet_diagnostic.SA1612.severity = none
+
+# SA1614: Element parameter documentation should have text
+dotnet_diagnostic.SA1614.severity = none
+
+# SA1615: Element return value should be documented
+dotnet_diagnostic.SA1615.severity = none
+
+# SA1616: Element return value documentation should have text
+dotnet_diagnostic.SA1616.severity = none
+
+# SA1618: The documentation for type parameter is missing
+dotnet_diagnostic.SA1618.severity = none
+
+# SA1619: The documentation for type parameter is missing
+dotnet_diagnostic.SA1619.severity = none
+
+# SA1622: Generic type parameter documentation should have text
+dotnet_diagnostic.SA1622.severity = none
+
+# SA1623: Property documentation text
+dotnet_diagnostic.SA1623.severity = none
+
+# SA1624: Because the property only contains a visible get accessor, the documentation summary text should begin with 'Gets'
+dotnet_diagnostic.SA1624.severity = none
+
+# SA1625: Element documentation should not be copied and pasted
+dotnet_diagnostic.SA1625.severity = none
+
+# SA1626: Single-line comments should not use documentation style slashes
+dotnet_diagnostic.SA1626.severity = none
+
+# SA1627: The documentation text within the \'exception\' tag should not be empty
+dotnet_diagnostic.SA1627.severity = none
+
+# SA1629: Documentation text should end with a period
+dotnet_diagnostic.SA1629.severity = none
+
+# SA1633: File should have header
+dotnet_diagnostic.SA1633.severity = none
+
+# SA1642: Constructor summary documentation should begin with standard text
+dotnet_diagnostic.SA1642.severity = none
+
+# SA1643: Destructor summary documentation should begin with standard text
+dotnet_diagnostic.SA1643.severity = none
+
+# SA1649: File name should match first type name
+dotnet_diagnostic.SA1649.severity = none
+
+# IDE0001: Simplify name
+dotnet_diagnostic.IDE0001.severity = suggestion
+
+# IDE0002: Simplify member access
+dotnet_diagnostic.IDE0002.severity = suggestion
+
+# IDE0003: Remove this or Me qualification
+dotnet_diagnostic.IDE0003.severity = suggestion
+
+# IDE0004: Remove Unnecessary Cast
+dotnet_diagnostic.IDE0004.severity = suggestion
+
+# IDE0005: Using directive is unnecessary.
+dotnet_diagnostic.IDE0005.severity = suggestion
+
+# IDE0007: Use implicit type
+dotnet_diagnostic.IDE0007.severity = silent
+
+# IDE0008: Use explicit type
+dotnet_diagnostic.IDE0008.severity = suggestion
+
+# IDE0009: Add this or Me qualification
+dotnet_diagnostic.IDE0009.severity = silent
+
+# IDE0010: Add missing cases
+dotnet_diagnostic.IDE0010.severity = silent
+
+# IDE0011: Add braces
+dotnet_diagnostic.IDE0011.severity = silent
+
+# IDE0016: Use 'throw' expression
+dotnet_diagnostic.IDE0016.severity = silent
+
+# IDE0017: Simplify object initialization
+dotnet_diagnostic.IDE0017.severity = suggestion
+
+# IDE0018: Inline variable declaration
+dotnet_diagnostic.IDE0018.severity = suggestion
+
+# IDE0019: Use pattern matching to avoid as followed by a null check
+dotnet_diagnostic.IDE0019.severity = suggestion
+
+# IDE0020: Use pattern matching to avoid is check followed by a cast (with variable)
+dotnet_diagnostic.IDE0020.severity = warning
+
+# IDE0021: Use expression body for constructors
+dotnet_diagnostic.IDE0021.severity = silent
+
+# IDE0022: Use expression body for methods
+dotnet_diagnostic.IDE0022.severity = silent
+
+# IDE0023: Use expression body for operators
+dotnet_diagnostic.IDE0023.severity = silent
+
+# IDE0024: Use expression body for operators
+dotnet_diagnostic.IDE0024.severity = silent
+
+# IDE0025: Use expression body for properties
+dotnet_diagnostic.IDE0025.severity = silent
+
+# IDE0026: Use expression body for indexers
+dotnet_diagnostic.IDE0026.severity = silent
+
+# IDE0027: Use expression body for accessors
+dotnet_diagnostic.IDE0027.severity = silent
+
+# IDE0028: Simplify collection initialization
+dotnet_diagnostic.IDE0028.severity = suggestion
+
+# IDE0029: Use coalesce expression
+dotnet_diagnostic.IDE0029.severity = warning
+
+# IDE0030: Use coalesce expression
+dotnet_diagnostic.IDE0030.severity = warning
+
+# IDE0031: Use null propagation
+dotnet_diagnostic.IDE0031.severity = warning
+
+# IDE0032: Use auto property
+dotnet_diagnostic.IDE0032.severity = silent
+
+# IDE0033: Use explicitly provided tuple name
+dotnet_diagnostic.IDE0033.severity = suggestion
+
+# IDE0034: Simplify 'default' expression
+dotnet_diagnostic.IDE0034.severity = suggestion
+
+# IDE0035: Remove unreachable code
+dotnet_diagnostic.IDE0035.severity = suggestion
+
+# IDE0036: Order modifiers
+dotnet_diagnostic.IDE0036.severity = warning
+
+# IDE0037: Use inferred member name
+dotnet_diagnostic.IDE0037.severity = silent
+
+# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
+dotnet_diagnostic.IDE0038.severity = suggestion
+
+# IDE0039: Use local function
+dotnet_diagnostic.IDE0039.severity = suggestion
+
+# IDE0040: Add accessibility modifiers
+dotnet_diagnostic.IDE0040.severity = suggestion
+
+# IDE0041: Use 'is null' check
+dotnet_diagnostic.IDE0041.severity = warning
+
+# IDE0042: Deconstruct variable declaration
+dotnet_diagnostic.IDE0042.severity = silent
+
+# IDE0043: Invalid format string
+dotnet_diagnostic.IDE0043.severity = warning
+
+# IDE0044: Add readonly modifier
+dotnet_diagnostic.IDE0044.severity = suggestion
+
+# IDE0045: Use conditional expression for assignment
+dotnet_diagnostic.IDE0045.severity = suggestion
+
+# IDE0046: Use conditional expression for return
+dotnet_diagnostic.IDE0046.severity = suggestion
+
+# IDE0047: Remove unnecessary parentheses
+dotnet_diagnostic.IDE0047.severity = silent
+
+# IDE0048: Add parentheses for clarity
+dotnet_diagnostic.IDE0048.severity = silent
+
+# IDE0049: Use language keywords instead of framework type names for type references
+dotnet_diagnostic.IDE0049.severity = warning
+
+# IDE0051: Remove unused private members
+dotnet_diagnostic.IDE0051.severity = suggestion
+
+# IDE0052: Remove unread private members
+dotnet_diagnostic.IDE0052.severity = suggestion
+
+# IDE0053: Use expression body for lambdas
+dotnet_diagnostic.IDE0053.severity = silent
+
+# IDE0054: Use compound assignment
+dotnet_diagnostic.IDE0054.severity = warning
+
+# IDE0055: Fix formatting
+dotnet_diagnostic.IDE0055.severity = suggestion
+
+# IDE0056: Use index operator
+dotnet_diagnostic.IDE0056.severity = suggestion
+
+# IDE0057: Use range operator
+dotnet_diagnostic.IDE0057.severity = suggestion
+
+# IDE0058: Expression value is never used
+dotnet_diagnostic.IDE0058.severity = silent
+
+# IDE0059: Unnecessary assignment of a value
+dotnet_diagnostic.IDE0059.severity = warning
+
+# IDE0060: Remove unused parameter
+dotnet_diagnostic.IDE0060.severity = warning
+dotnet_code_quality_unused_parameters = non_public
+
+# IDE0061: Use expression body for local functions
+dotnet_diagnostic.IDE0061.severity = silent
+
+# IDE0062: Make local function 'static'
+dotnet_diagnostic.IDE0062.severity = warning
+
+# IDE0063: Use simple 'using' statement
+dotnet_diagnostic.IDE0063.severity = silent
+
+# IDE0064: Make readonly fields writable
+dotnet_diagnostic.IDE0064.severity = silent
+
+# IDE0065: Misplaced using directive
+dotnet_diagnostic.IDE0065.severity = warning
+
+# IDE0066: Convert switch statement to expression
+dotnet_diagnostic.IDE0066.severity = suggestion
+
+# IDE0070: Use 'System.HashCode'
+dotnet_diagnostic.IDE0070.severity = suggestion
+
+# IDE0071: Simplify interpolation
+dotnet_diagnostic.IDE0071.severity = warning
+
+# IDE0072: Add missing cases
+dotnet_diagnostic.IDE0072.severity = silent
+
+# IDE0073: The file header is missing or not located at the top of the file
+dotnet_diagnostic.IDE0073.severity = warning
+
+# IDE0074: Use compound assignment
+dotnet_diagnostic.IDE0074.severity = warning
+
+# IDE0075: Simplify conditional expression
+dotnet_diagnostic.IDE0075.severity = silent
+
+# IDE0076: Invalid global 'SuppressMessageAttribute'
+dotnet_diagnostic.IDE0076.severity = warning
+
+# IDE0077: Avoid legacy format target in 'SuppressMessageAttribute'
+dotnet_diagnostic.IDE0077.severity = silent
+
+# IDE0078: Use pattern matching
+dotnet_diagnostic.IDE0078.severity = suggestion
+
+# IDE0079: Remove unnecessary suppression
+dotnet_diagnostic.IDE0079.severity = suggestion
+
+# IDE0080: Remove unnecessary suppression operator
+dotnet_diagnostic.IDE0080.severity = warning
+
+# IDE0081: Remove unnecessary suppression operator
+dotnet_diagnostic.IDE0081.severity = none
+
+# IDE0082: 'typeof' can be converted to 'nameof'
+dotnet_diagnostic.IDE0082.severity = warning
+
+# IDE0083: Use pattern matching
+dotnet_diagnostic.IDE0083.severity = silent
+
+# IDE0084: Use pattern matching (IsNot operator)
+dotnet_diagnostic.IDE0084.severity = none
+
+# IDE0090: Use 'new(...)'
+dotnet_diagnostic.IDE0090.severity = silent
+
+# IDE0100: Remove redundant equality
+dotnet_diagnostic.IDE0100.severity = warning
+
+# IDE0110: Remove unnecessary discard
+dotnet_diagnostic.IDE0110.severity = warning
+
+# IDE0120: Simplify LINQ expression
+dotnet_diagnostic.IDE0120.severity = none
+
+# IDE0130: Namespace does not match folder structure
+dotnet_diagnostic.IDE0130.severity = silent
+
+# IDE0140: Simplify object creation
+dotnet_diagnostic.IDE0140.severity = none
+
+# IDE0150: Prefer 'null' check over type check
+dotnet_diagnostic.IDE0150.severity = silent
+
+# IDE0160: Convert to block scoped namespace
+dotnet_diagnostic.IDE0160.severity = silent
+
+# IDE0161: Convert to file-scoped namespace
+dotnet_diagnostic.IDE0161.severity = silent
+
+# IDE0170: Simplify property pattern
+dotnet_diagnostic.IDE0170.severity = warning
+
+# IDE0180: Use tuple swap
+dotnet_diagnostic.IDE0180.severity = suggestion
+
+# IDE0200: Remove unnecessary lambda expression
+dotnet_diagnostic.IDE0200.severity = warning
+
+# IDE0210: Use top-level statements
+dotnet_diagnostic.IDE0210.severity = none
+
+# IDE0211: Convert to 'Program.Main' style program
+dotnet_diagnostic.IDE0211.severity = none
+
+# IDE0220: foreach cast
+dotnet_diagnostic.IDE0220.severity = silent
+
+# IDE0230: Use UTF8 string literal
+dotnet_diagnostic.IDE0230.severity = suggestion
+
+# IDE0240: Remove redundant nullable directive
+dotnet_diagnostic.IDE0240.severity = suggestion
+
+# IDE0241: Remove unnecessary nullable directive
+dotnet_diagnostic.IDE0241.severity = suggestion
+
+# IDE0250: Make struct readonly
+dotnet_diagnostic.IDE0250.severity = suggestion
+
+# IDE0251: Make member readonly
+dotnet_diagnostic.IDE0251.severity = suggestion
+
+# IDE0260: Use pattern matching
+dotnet_diagnostic.IDE0260.severity = suggestion
+
+# IDE0270: Use coalesce expression
+dotnet_diagnostic.IDE0270.severity = suggestion
+
+# IDE0280: Use 'nameof'
+dotnet_diagnostic.IDE0280.severity = warning
+
+# IDE0290: Use primary constructor
+dotnet_diagnostic.IDE0290.severity = suggestion
+
+# IDE0300: Use collection expression for array
+dotnet_diagnostic.IDE0300.severity = suggestion
+
+# IDE0301: Use collection expression for empty
+dotnet_diagnostic.IDE0301.severity = suggestion
+
+# IDE0302: Use collection expression for stackalloc
+dotnet_diagnostic.IDE0302.severity = suggestion
+
+# IDE0303: Use collection expression for Create()
+dotnet_diagnostic.IDE0303.severity = suggestion
+
+# IDE0304: Use collection expression for builder
+dotnet_diagnostic.IDE0304.severity = suggestion
+
+# IDE0305: Use collection expression for fluent
+dotnet_diagnostic.IDE0305.severity = suggestion
+
+# IDE1005: Delegate invocation can be simplified.
+dotnet_diagnostic.IDE1005.severity = warning
+
+# IDE1006: Naming styles
+dotnet_diagnostic.IDE1006.severity = silent
+
+# IDE2000: Allow multiple blank lines
+dotnet_diagnostic.IDE2000.severity = silent
+
+# IDE2001: Embedded statements must be on their own line
+dotnet_diagnostic.IDE2001.severity = silent
+
+# IDE2002: Consecutive braces must not have blank line between them
+dotnet_diagnostic.IDE2002.severity = silent
+
+# IDE2003: Allow statement immediately after block
+dotnet_diagnostic.IDE2003.severity = silent
+
+# IDE2004: Blank line not allowed after constructor initializer colon
+dotnet_diagnostic.IDE2004.severity = silent
+
+# IDE2005: Blank line not allowed after conditional expression token
+dotnet_diagnostic.IDE2005.severity = silent
+
+# IDE2006: Blank line not allowed after arrow expression clause token
+dotnet_diagnostic.IDE2006.severity = silent
diff --git a/eng/CodeAnalysis.test.globalconfig b/eng/CodeAnalysis.test.globalconfig
new file mode 100644
index 000000000..dcd680fd3
--- /dev/null
+++ b/eng/CodeAnalysis.test.globalconfig
@@ -0,0 +1,2068 @@
+is_global = true
+
+# AD0001: Analyzer threw an exception
+dotnet_diagnostic.AD0001.severity = none
+
+# BCL0001: Ensure minimum API surface is respected
+dotnet_diagnostic.BCL0001.severity = none
+
+# BCL0010: AppContext default value expected to be true
+dotnet_diagnostic.BCL0010.severity = none
+
+# BCL0011: AppContext default value defined in if statement with incorrect pattern
+dotnet_diagnostic.BCL0011.severity = none
+
+# BCL0012: AppContext default value defined in if statement at root of switch case
+dotnet_diagnostic.BCL0012.severity = none
+
+# BCL0015: Invalid P/Invoke call
+dotnet_diagnostic.BCL0015.severity = none
+
+# BCL0020: Invalid SR.Format call
+dotnet_diagnostic.BCL0020.severity = none
+
+# SYSLIB1045: Convert to 'GeneratedRegexAttribute'.
+dotnet_diagnostic.SYSLIB1045.severity = none
+
+# SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time
+dotnet_diagnostic.SYSLIB1054.severity = none
+
+# SYSLIB1055: Invalid 'CustomMarshallerAttribute' usage
+dotnet_diagnostic.SYSLIB1055.severity = error
+
+# SYSLIB1056:Specified marshaller type is invalid
+dotnet_diagnostic.SYSLIB1056.severity = error
+
+# SYSLIB1057: Marshaller type does not have the required shape
+dotnet_diagnostic.SYSLIB1057.severity = error
+
+# SYSLIB1058: Invalid 'NativeMarshallingAttribute' usage
+dotnet_diagnostic.SYSLIB1058.severity = error
+
+# SYSLIB1060: Specified marshaller type is invalid
+dotnet_diagnostic.SYSLIB1060.severity = error
+
+# SYSLIB1061: Marshaller type has incompatible method signatures
+dotnet_diagnostic.SYSLIB1061.severity = error
+
+# CA1000: Do not declare static members on generic types
+dotnet_diagnostic.CA1000.severity = none
+
+# CA1001: Types that own disposable fields should be disposable
+dotnet_diagnostic.CA1001.severity = none
+
+# CA1002: Do not expose generic lists
+dotnet_diagnostic.CA1002.severity = none
+
+# CA1003: Use generic event handler instances
+dotnet_diagnostic.CA1003.severity = none
+
+# CA1005: Avoid excessive parameters on generic types
+dotnet_diagnostic.CA1005.severity = none
+
+# CA1008: Enums should have zero value
+dotnet_diagnostic.CA1008.severity = none
+
+# CA1010: Generic interface should also be implemented
+dotnet_diagnostic.CA1010.severity = none
+
+# CA1012: Abstract types should not have public constructors
+dotnet_diagnostic.CA1012.severity = none
+
+# CA1014: Mark assemblies with CLSCompliant
+dotnet_diagnostic.CA1014.severity = none
+
+# CA1016: Mark assemblies with assembly version
+dotnet_diagnostic.CA1016.severity = none
+
+# CA1017: Mark assemblies with ComVisible
+dotnet_diagnostic.CA1017.severity = none
+
+# CA1018: Mark attributes with AttributeUsageAttribute
+dotnet_diagnostic.CA1018.severity = none
+
+# CA1019: Define accessors for attribute arguments
+dotnet_diagnostic.CA1019.severity = none
+
+# CA1021: Avoid out parameters
+dotnet_diagnostic.CA1021.severity = none
+
+# CA1024: Use properties where appropriate
+dotnet_diagnostic.CA1024.severity = none
+
+# CA1027: Mark enums with FlagsAttribute
+dotnet_diagnostic.CA1027.severity = none
+
+# CA1028: Enum Storage should be Int32
+dotnet_diagnostic.CA1028.severity = none
+
+# CA1030: Use events where appropriate
+dotnet_diagnostic.CA1030.severity = none
+
+# CA1031: Do not catch general exception types
+dotnet_diagnostic.CA1031.severity = none
+
+# CA1032: Implement standard exception constructors
+dotnet_diagnostic.CA1032.severity = none
+
+# CA1033: Interface methods should be callable by child types
+dotnet_diagnostic.CA1033.severity = none
+
+# CA1034: Nested types should not be visible
+dotnet_diagnostic.CA1034.severity = none
+
+# CA1036: Override methods on comparable types
+dotnet_diagnostic.CA1036.severity = none
+
+# CA1040: Avoid empty interfaces
+dotnet_diagnostic.CA1040.severity = none
+
+# CA1041: Provide ObsoleteAttribute message
+dotnet_diagnostic.CA1041.severity = none
+
+# CA1043: Use Integral Or String Argument For Indexers
+dotnet_diagnostic.CA1043.severity = none
+
+# CA1044: Properties should not be write only
+dotnet_diagnostic.CA1044.severity = none
+
+# CA1045: Do not pass types by reference
+dotnet_diagnostic.CA1045.severity = none
+
+# CA1046: Do not overload equality operator on reference types
+dotnet_diagnostic.CA1046.severity = none
+
+# CA1047: Do not declare protected member in sealed type
+dotnet_diagnostic.CA1047.severity = none
+
+# CA1050: Declare types in namespaces
+dotnet_diagnostic.CA1050.severity = none
+
+# CA1051: Do not declare visible instance fields
+dotnet_diagnostic.CA1051.severity = none
+
+# CA1052: Static holder types should be Static or NotInheritable
+dotnet_diagnostic.CA1052.severity = none
+
+# CA1054: URI-like parameters should not be strings
+dotnet_diagnostic.CA1054.severity = none
+
+# CA1055: URI-like return values should not be strings
+dotnet_diagnostic.CA1055.severity = none
+
+# CA1056: URI-like properties should not be strings
+dotnet_diagnostic.CA1056.severity = none
+
+# CA1058: Types should not extend certain base types
+dotnet_diagnostic.CA1058.severity = none
+
+# CA1060: Move pinvokes to native methods class
+dotnet_diagnostic.CA1060.severity = none
+
+# CA1061: Do not hide base class methods
+dotnet_diagnostic.CA1061.severity = none
+
+# CA1062: Validate arguments of public methods
+dotnet_diagnostic.CA1062.severity = none
+
+# CA1063: Implement IDisposable Correctly
+dotnet_diagnostic.CA1063.severity = none
+
+# CA1064: Exceptions should be public
+dotnet_diagnostic.CA1064.severity = none
+
+# CA1065: Do not raise exceptions in unexpected locations
+dotnet_diagnostic.CA1065.severity = none
+
+# CA1066: Implement IEquatable when overriding Object.Equals
+dotnet_diagnostic.CA1066.severity = none
+
+# CA1067: Override Object.Equals(object) when implementing IEquatable
+dotnet_diagnostic.CA1067.severity = none
+
+# CA1068: CancellationToken parameters must come last
+dotnet_diagnostic.CA1068.severity = none
+
+# CA1069: Enums values should not be duplicated
+dotnet_diagnostic.CA1069.severity = none
+
+# CA1070: Do not declare event fields as virtual
+dotnet_diagnostic.CA1070.severity = none
+
+# CA1200: Avoid using cref tags with a prefix
+dotnet_diagnostic.CA1200.severity = none
+
+# CA1303: Do not pass literals as localized parameters
+dotnet_diagnostic.CA1303.severity = none
+
+# CA1304: Specify CultureInfo
+dotnet_diagnostic.CA1304.severity = none
+
+# CA1305: Specify IFormatProvider
+dotnet_diagnostic.CA1305.severity = none
+
+# CA1307: Specify StringComparison for clarity
+dotnet_diagnostic.CA1307.severity = none
+
+# CA1308: Normalize strings to uppercase
+dotnet_diagnostic.CA1308.severity = none
+
+# CA1309: Use ordinal string comparison
+dotnet_diagnostic.CA1309.severity = none
+
+# CA1310: Specify StringComparison for correctness
+dotnet_diagnostic.CA1310.severity = none
+
+# CA1311: Specify a culture or use an invariant version
+dotnet_diagnostic.CA1311.severity = none
+
+# CA1401: P/Invokes should not be visible
+dotnet_diagnostic.CA1401.severity = none
+
+# CA1416: Validate platform compatibility
+dotnet_diagnostic.CA1416.severity = none
+
+# CA1417: Do not use 'OutAttribute' on string parameters for P/Invokes
+dotnet_diagnostic.CA1417.severity = none
+
+# CA1418: Use valid platform string
+dotnet_diagnostic.CA1418.severity = none
+
+# CA1419: Provide a parameterless constructor that is as visible as the containing type for concrete types derived from 'System.Runtime.InteropServices.SafeHandle'
+dotnet_diagnostic.CA1419.severity = none
+
+# CA1420: Property, type, or attribute requires runtime marshalling
+dotnet_diagnostic.CA1420.severity = none
+
+# CA1421: This method uses runtime marshalling even when the 'DisableRuntimeMarshallingAttribute' is applied
+dotnet_diagnostic.CA1421.severity = none
+
+# CA1422: Validate platform compatibility
+dotnet_diagnostic.CA1422.severity = none
+
+# CA1501: Avoid excessive inheritance
+dotnet_diagnostic.CA1501.severity = none
+
+# CA1502: Avoid excessive complexity
+dotnet_diagnostic.CA1502.severity = none
+
+# CA1505: Avoid unmaintainable code
+dotnet_diagnostic.CA1505.severity = none
+
+# CA1506: Avoid excessive class coupling
+dotnet_diagnostic.CA1506.severity = none
+
+# CA1507: Use nameof to express symbol names
+dotnet_diagnostic.CA1507.severity = none
+
+# CA1508: Avoid dead conditional code
+dotnet_diagnostic.CA1508.severity = none
+
+# CA1509: Invalid entry in code metrics rule specification file
+dotnet_diagnostic.CA1509.severity = none
+
+# CA1510: Use ArgumentNullException throw helper
+dotnet_diagnostic.CA1510.severity = none
+
+# CA1511: Use ArgumentException throw helper
+dotnet_diagnostic.CA1511.severity = none
+
+# CA1512: Use ArgumentOutOfRangeException throw helper
+dotnet_diagnostic.CA1512.severity = none
+
+# CA1513: Use ObjectDisposedException throw helper
+dotnet_diagnostic.CA1513.severity = none
+
+# CA1514: Avoid redundant length argument
+dotnet_diagnostic.CA1514.severity = none
+
+# CA1515: Consider making public types internal
+dotnet_diagnostic.CA1515.severity = none
+
+# CA1700: Do not name enum values 'Reserved'
+dotnet_diagnostic.CA1700.severity = none
+
+# CA1707: Identifiers should not contain underscores
+dotnet_diagnostic.CA1707.severity = none
+
+# CA1708: Identifiers should differ by more than case
+dotnet_diagnostic.CA1708.severity = none
+
+# CA1710: Identifiers should have correct suffix
+dotnet_diagnostic.CA1710.severity = none
+
+# CA1711: Identifiers should not have incorrect suffix
+dotnet_diagnostic.CA1711.severity = none
+
+# CA1712: Do not prefix enum values with type name
+dotnet_diagnostic.CA1712.severity = none
+
+# CA1713: Events should not have 'Before' or 'After' prefix
+dotnet_diagnostic.CA1713.severity = none
+
+# CA1715: Identifiers should have correct prefix
+dotnet_diagnostic.CA1715.severity = none
+
+# CA1716: Identifiers should not match keywords
+dotnet_diagnostic.CA1716.severity = none
+
+# CA1720: Identifier contains type name
+dotnet_diagnostic.CA1720.severity = none
+
+# CA1721: Property names should not match get methods
+dotnet_diagnostic.CA1721.severity = none
+
+# CA1724: Type names should not match namespaces
+dotnet_diagnostic.CA1724.severity = none
+
+# CA1725: Parameter names should match base declaration
+dotnet_diagnostic.CA1725.severity = none
+
+# CA1727: Use PascalCase for named placeholders
+dotnet_diagnostic.CA1727.severity = none
+
+# CA1802: Use literals where appropriate
+dotnet_diagnostic.CA1802.severity = none
+
+# CA1805: Do not initialize unnecessarily
+dotnet_diagnostic.CA1805.severity = none
+
+# CA1806: Do not ignore method results
+dotnet_diagnostic.CA1806.severity = none
+
+# CA1810: Initialize reference type static fields inline
+dotnet_diagnostic.CA1810.severity = none
+
+# CA1812: Avoid uninstantiated internal classes
+dotnet_diagnostic.CA1812.severity = none
+
+# CA1813: Avoid unsealed attributes
+dotnet_diagnostic.CA1813.severity = none
+
+# CA1814: Prefer jagged arrays over multidimensional
+dotnet_diagnostic.CA1814.severity = none
+
+# CA1815: Override equals and operator equals on value types
+dotnet_diagnostic.CA1815.severity = none
+
+# CA1816: Dispose methods should call SuppressFinalize
+dotnet_diagnostic.CA1816.severity = none
+
+# CA1819: Properties should not return arrays
+dotnet_diagnostic.CA1819.severity = none
+
+# CA1820: Test for empty strings using string length
+dotnet_diagnostic.CA1820.severity = none
+
+# CA1821: Remove empty Finalizers
+dotnet_diagnostic.CA1821.severity = none
+
+# CA1822: Mark members as static
+dotnet_diagnostic.CA1822.severity = none
+
+# CA1823: Avoid unused private fields
+dotnet_diagnostic.CA1823.severity = none
+
+# CA1824: Mark assemblies with NeutralResourcesLanguageAttribute
+dotnet_diagnostic.CA1824.severity = none
+
+# CA1825: Avoid zero-length array allocations.
+dotnet_diagnostic.CA1825.severity = none
+
+# CA1826: Do not use Enumerable methods on indexable collections
+dotnet_diagnostic.CA1826.severity = none
+
+# CA1827: Do not use Count() or LongCount() when Any() can be used
+dotnet_diagnostic.CA1827.severity = none
+
+# CA1828: Do not use CountAsync() or LongCountAsync() when AnyAsync() can be used
+dotnet_diagnostic.CA1828.severity = none
+
+# CA1829: Use Length/Count property instead of Count() when available
+dotnet_diagnostic.CA1829.severity = none
+
+# CA1830: Prefer strongly-typed Append and Insert method overloads on StringBuilder
+dotnet_diagnostic.CA1830.severity = none
+
+# CA1831: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1831.severity = none
+
+# CA1832: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1832.severity = none
+
+# CA1833: Use AsSpan or AsMemory instead of Range-based indexers when appropriate
+dotnet_diagnostic.CA1833.severity = none
+
+# CA1834: Consider using 'StringBuilder.Append(char)' when applicable
+dotnet_diagnostic.CA1834.severity = none
+
+# CA1835: Prefer the 'Memory'-based overloads for 'ReadAsync' and 'WriteAsync'
+dotnet_diagnostic.CA1835.severity = none
+
+# CA1836: Prefer IsEmpty over Count
+dotnet_diagnostic.CA1836.severity = none
+
+# CA1837: Use 'Environment.ProcessId'
+dotnet_diagnostic.CA1837.severity = none
+
+# CA1838: Avoid 'StringBuilder' parameters for P/Invokes
+dotnet_diagnostic.CA1838.severity = none
+
+# CA1839: Use 'Environment.ProcessPath'
+dotnet_diagnostic.CA1839.severity = none
+
+# CA1840: Use 'Environment.CurrentManagedThreadId'
+dotnet_diagnostic.CA1840.severity = none
+
+# CA1841: Prefer Dictionary.Contains methods
+dotnet_diagnostic.CA1841.severity = none
+
+# CA1842: Do not use 'WhenAll' with a single task
+dotnet_diagnostic.CA1842.severity = none
+
+# CA1843: Do not use 'WaitAll' with a single task
+dotnet_diagnostic.CA1843.severity = none
+
+# CA1844: Provide memory-based overrides of async methods when subclassing 'Stream'
+dotnet_diagnostic.CA1844.severity = none
+
+# CA1845: Use span-based 'string.Concat'
+dotnet_diagnostic.CA1845.severity = none
+
+# CA1846: Prefer 'AsSpan' over 'Substring'
+dotnet_diagnostic.CA1846.severity = none
+
+# CA1847: Use char literal for a single character lookup
+dotnet_diagnostic.CA1847.severity = none
+
+# CA1848: Use the LoggerMessage delegates
+dotnet_diagnostic.CA1848.severity = none
+
+# CA1849: Call async methods when in an async method
+dotnet_diagnostic.CA1849.severity = none
+
+# CA1850: Prefer static 'HashData' method over 'ComputeHash'
+dotnet_diagnostic.CA1850.severity = none
+
+# CA1851: Possible multiple enumerations of 'IEnumerable' collection
+dotnet_diagnostic.CA1851.severity = none
+
+# CA1852: Seal internal types
+dotnet_diagnostic.CA1852.severity = none
+
+# CA1853: Unnecessary call to 'Dictionary.ContainsKey(key)'
+dotnet_diagnostic.CA1853.severity = none
+
+# CA1854: Prefer the 'IDictionary.TryGetValue(TKey, out TValue)' method
+dotnet_diagnostic.CA1854.severity = none
+
+# CA1855: Prefer 'Clear' over 'Fill'
+dotnet_diagnostic.CA1855.severity = none
+
+# CA1856: Incorrect usage of ConstantExpected attribute
+dotnet_diagnostic.CA1856.severity = none
+
+# CA1857: A constant is expected for the parameter
+dotnet_diagnostic.CA1857.severity = none
+
+# CA1858: Use 'StartsWith' instead of 'IndexOf'
+dotnet_diagnostic.CA1858.severity = none
+
+# CA1859: Use concrete types when possible for improved performance
+dotnet_diagnostic.CA1859.severity = none
+
+# CA1860: Avoid using 'Enumerable.Any()' extension method
+dotnet_diagnostic.CA1860.severity = none
+
+# CA1861: Avoid constant arrays as arguments
+dotnet_diagnostic.CA1861.severity = none
+
+# CA1862: Prefer using 'StringComparer'/'StringComparison' to perform case-insensitive string comparisons
+dotnet_diagnostic.CA1862.severity = none
+
+# CA1863: Use 'CompositeFormat'
+dotnet_diagnostic.CA1863.severity = none
+
+# CA1864: Prefer the 'IDictionary.TryAdd(TKey, TValue)' method
+dotnet_diagnostic.CA1864.severity = none
+
+# CA1865: Use char overload
+dotnet_diagnostic.CA1865.severity = none
+
+# CA1866: Use char overload
+dotnet_diagnostic.CA1866.severity = none
+
+# CA1867: Use char overload
+dotnet_diagnostic.CA1867.severity = none
+
+# CA1868: Unnecessary call to 'Contains' for sets
+dotnet_diagnostic.CA1868.severity = none
+
+# CA1869: Cache and reuse 'JsonSerializerOptions' instances
+dotnet_diagnostic.CA1869.severity = none
+
+# CA1870: Use a cached 'SearchValues' instance
+dotnet_diagnostic.CA1870.severity = none
+
+# CA1871: Do not pass a nullable struct to 'ArgumentNullException.ThrowIfNull'
+dotnet_diagnostic.CA1871.severity = none
+
+# CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString'
+dotnet_diagnostic.CA1872.severity = none
+
+# CA2000: Dispose objects before losing scope
+dotnet_diagnostic.CA2000.severity = none
+
+# CA2002: Do not lock on objects with weak identity
+dotnet_diagnostic.CA2002.severity = none
+
+# CA2007: Consider calling ConfigureAwait on the awaited task
+dotnet_diagnostic.CA2007.severity = none
+
+# CA2008: Do not create tasks without passing a TaskScheduler
+dotnet_diagnostic.CA2008.severity = none
+
+# CA2009: Do not call ToImmutableCollection on an ImmutableCollection value
+dotnet_diagnostic.CA2009.severity = none
+
+# CA2011: Avoid infinite recursion
+dotnet_diagnostic.CA2011.severity = none
+
+# CA2012: Use ValueTasks correctly
+dotnet_diagnostic.CA2012.severity = none
+
+# CA2013: Do not use ReferenceEquals with value types
+dotnet_diagnostic.CA2013.severity = none
+
+# CA2014: Do not use stackalloc in loops.
+dotnet_diagnostic.CA2014.severity = none
+
+# CA2015: Do not define finalizers for types derived from MemoryManager
+dotnet_diagnostic.CA2015.severity = none
+
+# CA2016: Forward the 'CancellationToken' parameter to methods
+dotnet_diagnostic.CA2016.severity = none
+
+# CA2017: Parameter count mismatch
+dotnet_diagnostic.CA2017.severity = none
+
+# CA2018: 'Buffer.BlockCopy' expects the number of bytes to be copied for the 'count' argument
+dotnet_diagnostic.CA2018.severity = none
+
+# CA2019: Improper 'ThreadStatic' field initialization
+dotnet_diagnostic.CA2019.severity = none
+
+# CA2020: Prevent behavioral change
+dotnet_diagnostic.CA2020.severity = none
+
+# CA2021: Do not call Enumerable.Cast or Enumerable.OfType with incompatible types
+dotnet_diagnostic.CA2021.severity = none
+
+# CA2022: Avoid inexact read with 'Stream.Read'
+dotnet_diagnostic.CA2022.severity = none
+
+# CA2100: Review SQL queries for security vulnerabilities
+dotnet_diagnostic.CA2100.severity = none
+
+# CA2101: Specify marshaling for P/Invoke string arguments
+dotnet_diagnostic.CA2101.severity = none
+
+# CA2119: Seal methods that satisfy private interfaces
+dotnet_diagnostic.CA2119.severity = none
+
+# CA2153: Do Not Catch Corrupted State Exceptions
+dotnet_diagnostic.CA2153.severity = none
+
+# CA2200: Rethrow to preserve stack details
+dotnet_diagnostic.CA2200.severity = none
+
+# CA2201: Do not raise reserved exception types
+dotnet_diagnostic.CA2201.severity = none
+
+# CA2207: Initialize value type static fields inline
+dotnet_diagnostic.CA2207.severity = none
+
+# CA2208: Instantiate argument exceptions correctly
+dotnet_diagnostic.CA2208.severity = none
+
+# CA2211: Non-constant fields should not be visible
+dotnet_diagnostic.CA2211.severity = none
+
+# CA2213: Disposable fields should be disposed
+dotnet_diagnostic.CA2213.severity = none
+
+# CA2214: Do not call overridable methods in constructors
+dotnet_diagnostic.CA2214.severity = none
+
+# CA2215: Dispose methods should call base class dispose
+dotnet_diagnostic.CA2215.severity = none
+
+# CA2216: Disposable types should declare finalizer
+dotnet_diagnostic.CA2216.severity = none
+
+# CA2217: Do not mark enums with FlagsAttribute
+dotnet_diagnostic.CA2217.severity = none
+
+# CA2218: Override GetHashCode on overriding Equals
+dotnet_diagnostic.CA2218.severity = none
+
+# CA2219: Do not raise exceptions in finally clauses
+dotnet_diagnostic.CA2219.severity = none
+
+# CA2224: Override Equals on overloading operator equals
+dotnet_diagnostic.CA2224.severity = none
+
+# CA2225: Operator overloads have named alternates
+dotnet_diagnostic.CA2225.severity = none
+
+# CA2226: Operators should have symmetrical overloads
+dotnet_diagnostic.CA2226.severity = none
+
+# CA2227: Collection properties should be read only
+dotnet_diagnostic.CA2227.severity = none
+
+# CA2229: Implement serialization constructors
+dotnet_diagnostic.CA2229.severity = none
+
+# CA2231: Overload operator equals on overriding value type Equals
+dotnet_diagnostic.CA2231.severity = none
+
+# CA2234: Pass system uri objects instead of strings
+dotnet_diagnostic.CA2234.severity = none
+
+# CA2235: Mark all non-serializable fields
+dotnet_diagnostic.CA2235.severity = none
+
+# CA2237: Mark ISerializable types with serializable
+dotnet_diagnostic.CA2237.severity = none
+
+# CA2241: Provide correct arguments to formatting methods
+dotnet_diagnostic.CA2241.severity = none
+
+# CA2242: Test for NaN correctly
+dotnet_diagnostic.CA2242.severity = none
+
+# CA2243: Attribute string literals should parse correctly
+dotnet_diagnostic.CA2243.severity = none
+
+# CA2244: Do not duplicate indexed element initializations
+dotnet_diagnostic.CA2244.severity = none
+
+# CA2245: Do not assign a property to itself
+dotnet_diagnostic.CA2245.severity = none
+
+# CA2246: Assigning symbol and its member in the same statement
+dotnet_diagnostic.CA2246.severity = none
+
+# CA2247: Argument passed to TaskCompletionSource constructor should be TaskCreationOptions enum instead of TaskContinuationOptions enum
+dotnet_diagnostic.CA2247.severity = none
+
+# CA2248: Provide correct 'enum' argument to 'Enum.HasFlag'
+dotnet_diagnostic.CA2248.severity = none
+
+# CA2249: Consider using 'string.Contains' instead of 'string.IndexOf'
+dotnet_diagnostic.CA2249.severity = none
+
+# CA2250: Use 'ThrowIfCancellationRequested'
+dotnet_diagnostic.CA2250.severity = none
+
+# CA2251: Use 'string.Equals'
+dotnet_diagnostic.CA2251.severity = none
+
+# CA2252: This API requires opting into preview features
+dotnet_diagnostic.CA2252.severity = error
+
+# CA2253: Named placeholders should not be numeric values
+dotnet_diagnostic.CA2253.severity = none
+
+# CA2254: Template should be a static expression
+dotnet_diagnostic.CA2254.severity = none
+
+# CA2255: The 'ModuleInitializer' attribute should not be used in libraries
+dotnet_diagnostic.CA2255.severity = none
+
+# CA2256: All members declared in parent interfaces must have an implementation in a DynamicInterfaceCastableImplementation-attributed interface
+dotnet_diagnostic.CA2256.severity = none
+
+# CA2257: Members defined on an interface with the 'DynamicInterfaceCastableImplementationAttribute' should be 'static'
+dotnet_diagnostic.CA2257.severity = none
+
+# CA2258: Providing a 'DynamicInterfaceCastableImplementation' interface in Visual Basic is unsupported
+dotnet_diagnostic.CA2258.severity = none
+
+# CA2259: 'ThreadStatic' only affects static fields
+dotnet_diagnostic.CA2259.severity = none
+
+# CA2260: Use correct type parameter
+dotnet_diagnostic.CA2260.severity = none
+
+# CA2261: Do not use ConfigureAwaitOptions.SuppressThrowing with Task
+dotnet_diagnostic.CA2261.severity = none
+
+# CA2262: Set 'MaxResponseHeadersLength' properly
+dotnet_diagnostic.CA2262.severity = none
+
+# CA2263: Prefer generic overload when type is known
+dotnet_diagnostic.CA2263.severity = none
+
+# CA2264: Do not pass a non-nullable value to 'ArgumentNullException.ThrowIfNull'
+dotnet_diagnostic.CA2264.severity = none
+
+# CA2265: Do not compare Span to 'null' or 'default'
+dotnet_diagnostic.CA2265.severity = none
+
+# CA2300: Do not use insecure deserializer BinaryFormatter
+dotnet_diagnostic.CA2300.severity = none
+
+# CA2301: Do not call BinaryFormatter.Deserialize without first setting BinaryFormatter.Binder
+dotnet_diagnostic.CA2301.severity = none
+
+# CA2302: Ensure BinaryFormatter.Binder is set before calling BinaryFormatter.Deserialize
+dotnet_diagnostic.CA2302.severity = none
+
+# CA2305: Do not use insecure deserializer LosFormatter
+dotnet_diagnostic.CA2305.severity = none
+
+# CA2310: Do not use insecure deserializer NetDataContractSerializer
+dotnet_diagnostic.CA2310.severity = none
+
+# CA2311: Do not deserialize without first setting NetDataContractSerializer.Binder
+dotnet_diagnostic.CA2311.severity = none
+
+# CA2312: Ensure NetDataContractSerializer.Binder is set before deserializing
+dotnet_diagnostic.CA2312.severity = none
+
+# CA2315: Do not use insecure deserializer ObjectStateFormatter
+dotnet_diagnostic.CA2315.severity = none
+
+# CA2321: Do not deserialize with JavaScriptSerializer using a SimpleTypeResolver
+dotnet_diagnostic.CA2321.severity = none
+
+# CA2322: Ensure JavaScriptSerializer is not initialized with SimpleTypeResolver before deserializing
+dotnet_diagnostic.CA2322.severity = none
+
+# CA2326: Do not use TypeNameHandling values other than None
+dotnet_diagnostic.CA2326.severity = none
+
+# CA2327: Do not use insecure JsonSerializerSettings
+dotnet_diagnostic.CA2327.severity = none
+
+# CA2328: Ensure that JsonSerializerSettings are secure
+dotnet_diagnostic.CA2328.severity = none
+
+# CA2329: Do not deserialize with JsonSerializer using an insecure configuration
+dotnet_diagnostic.CA2329.severity = none
+
+# CA2330: Ensure that JsonSerializer has a secure configuration when deserializing
+dotnet_diagnostic.CA2330.severity = none
+
+# CA2350: Do not use DataTable.ReadXml() with untrusted data
+dotnet_diagnostic.CA2350.severity = none
+
+# CA2351: Do not use DataSet.ReadXml() with untrusted data
+dotnet_diagnostic.CA2351.severity = none
+
+# CA2352: Unsafe DataSet or DataTable in serializable type can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2352.severity = none
+
+# CA2353: Unsafe DataSet or DataTable in serializable type
+dotnet_diagnostic.CA2353.severity = none
+
+# CA2354: Unsafe DataSet or DataTable in deserialized object graph can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2354.severity = none
+
+# CA2355: Unsafe DataSet or DataTable type found in deserializable object graph
+dotnet_diagnostic.CA2355.severity = none
+
+# CA2356: Unsafe DataSet or DataTable type in web deserializable object graph
+dotnet_diagnostic.CA2356.severity = none
+
+# CA2361: Ensure auto-generated class containing DataSet.ReadXml() is not used with untrusted data
+dotnet_diagnostic.CA2361.severity = none
+
+# CA2362: Unsafe DataSet or DataTable in auto-generated serializable type can be vulnerable to remote code execution attacks
+dotnet_diagnostic.CA2362.severity = none
+
+# CA3001: Review code for SQL injection vulnerabilities
+dotnet_diagnostic.CA3001.severity = none
+
+# CA3002: Review code for XSS vulnerabilities
+dotnet_diagnostic.CA3002.severity = none
+
+# CA3003: Review code for file path injection vulnerabilities
+dotnet_diagnostic.CA3003.severity = none
+
+# CA3004: Review code for information disclosure vulnerabilities
+dotnet_diagnostic.CA3004.severity = none
+
+# CA3005: Review code for LDAP injection vulnerabilities
+dotnet_diagnostic.CA3005.severity = none
+
+# CA3006: Review code for process command injection vulnerabilities
+dotnet_diagnostic.CA3006.severity = none
+
+# CA3007: Review code for open redirect vulnerabilities
+dotnet_diagnostic.CA3007.severity = none
+
+# CA3008: Review code for XPath injection vulnerabilities
+dotnet_diagnostic.CA3008.severity = none
+
+# CA3009: Review code for XML injection vulnerabilities
+dotnet_diagnostic.CA3009.severity = none
+
+# CA3010: Review code for XAML injection vulnerabilities
+dotnet_diagnostic.CA3010.severity = none
+
+# CA3011: Review code for DLL injection vulnerabilities
+dotnet_diagnostic.CA3011.severity = none
+
+# CA3012: Review code for regex injection vulnerabilities
+dotnet_diagnostic.CA3012.severity = none
+
+# CA3061: Do Not Add Schema By URL
+dotnet_diagnostic.CA3061.severity = none
+
+# CA3075: Insecure DTD processing in XML
+dotnet_diagnostic.CA3075.severity = none
+
+# CA3076: Insecure XSLT script processing
+dotnet_diagnostic.CA3076.severity = none
+
+# CA3077: Insecure Processing in API Design, XmlDocument and XmlTextReader
+dotnet_diagnostic.CA3077.severity = none
+
+# CA3147: Mark Verb Handlers With Validate Antiforgery Token
+dotnet_diagnostic.CA3147.severity = none
+
+# CA5350: Do Not Use Weak Cryptographic Algorithms
+dotnet_diagnostic.CA5350.severity = none
+
+# CA5351: Do Not Use Broken Cryptographic Algorithms
+dotnet_diagnostic.CA5351.severity = none
+
+# CA5358: Review cipher mode usage with cryptography experts
+dotnet_diagnostic.CA5358.severity = none
+
+# CA5359: Do Not Disable Certificate Validation
+dotnet_diagnostic.CA5359.severity = none
+
+# CA5360: Do Not Call Dangerous Methods In Deserialization
+dotnet_diagnostic.CA5360.severity = none
+
+# CA5361: Do Not Disable SChannel Use of Strong Crypto
+dotnet_diagnostic.CA5361.severity = none
+
+# CA5362: Potential reference cycle in deserialized object graph
+dotnet_diagnostic.CA5362.severity = none
+
+# CA5363: Do Not Disable Request Validation
+dotnet_diagnostic.CA5363.severity = none
+
+# CA5364: Do Not Use Deprecated Security Protocols
+dotnet_diagnostic.CA5364.severity = none
+
+# CA5365: Do Not Disable HTTP Header Checking
+dotnet_diagnostic.CA5365.severity = none
+
+# CA5366: Use XmlReader for 'DataSet.ReadXml()'
+dotnet_diagnostic.CA5366.severity = none
+
+# CA5367: Do Not Serialize Types With Pointer Fields
+dotnet_diagnostic.CA5367.severity = none
+
+# CA5368: Set ViewStateUserKey For Classes Derived From Page
+dotnet_diagnostic.CA5368.severity = none
+
+# CA5369: Use XmlReader for 'XmlSerializer.Deserialize()'
+dotnet_diagnostic.CA5369.severity = none
+
+# CA5370: Use XmlReader for XmlValidatingReader constructor
+dotnet_diagnostic.CA5370.severity = none
+
+# CA5371: Use XmlReader for 'XmlSchema.Read()'
+dotnet_diagnostic.CA5371.severity = none
+
+# CA5372: Use XmlReader for XPathDocument constructor
+dotnet_diagnostic.CA5372.severity = none
+
+# CA5373: Do not use obsolete key derivation function
+dotnet_diagnostic.CA5373.severity = none
+
+# CA5374: Do Not Use XslTransform
+dotnet_diagnostic.CA5374.severity = none
+
+# CA5375: Do Not Use Account Shared Access Signature
+dotnet_diagnostic.CA5375.severity = none
+
+# CA5376: Use SharedAccessProtocol HttpsOnly
+dotnet_diagnostic.CA5376.severity = none
+
+# CA5377: Use Container Level Access Policy
+dotnet_diagnostic.CA5377.severity = none
+
+# CA5378: Do not disable ServicePointManagerSecurityProtocols
+dotnet_diagnostic.CA5378.severity = none
+
+# CA5379: Ensure Key Derivation Function algorithm is sufficiently strong
+dotnet_diagnostic.CA5379.severity = none
+
+# CA5380: Do Not Add Certificates To Root Store
+dotnet_diagnostic.CA5380.severity = none
+
+# CA5381: Ensure Certificates Are Not Added To Root Store
+dotnet_diagnostic.CA5381.severity = none
+
+# CA5382: Use Secure Cookies In ASP.Net Core
+dotnet_diagnostic.CA5382.severity = none
+
+# CA5383: Ensure Use Secure Cookies In ASP.NET Core
+dotnet_diagnostic.CA5383.severity = none
+
+# CA5384: Do Not Use Digital Signature Algorithm (DSA)
+dotnet_diagnostic.CA5384.severity = none
+
+# CA5385: Use Rivest-Shamir-Adleman (RSA) Algorithm With Sufficient Key Size
+dotnet_diagnostic.CA5385.severity = none
+
+# CA5386: Avoid hardcoding SecurityProtocolType value
+dotnet_diagnostic.CA5386.severity = none
+
+# CA5387: Do Not Use Weak Key Derivation Function With Insufficient Iteration Count
+dotnet_diagnostic.CA5387.severity = none
+
+# CA5388: Ensure Sufficient Iteration Count When Using Weak Key Derivation Function
+dotnet_diagnostic.CA5388.severity = none
+
+# CA5389: Do Not Add Archive Item's Path To The Target File System Path
+dotnet_diagnostic.CA5389.severity = none
+
+# CA5390: Do not hard-code encryption key
+dotnet_diagnostic.CA5390.severity = none
+
+# CA5391: Use antiforgery tokens in ASP.NET Core MVC controllers
+dotnet_diagnostic.CA5391.severity = none
+
+# CA5392: Use DefaultDllImportSearchPaths attribute for P/Invokes
+dotnet_diagnostic.CA5392.severity = none
+
+# CA5393: Do not use unsafe DllImportSearchPath value
+dotnet_diagnostic.CA5393.severity = none
+
+# CA5394: Do not use insecure randomness
+dotnet_diagnostic.CA5394.severity = none
+
+# CA5395: Miss HttpVerb attribute for action methods
+dotnet_diagnostic.CA5395.severity = none
+
+# CA5396: Set HttpOnly to true for HttpCookie
+dotnet_diagnostic.CA5396.severity = none
+
+# CA5397: Do not use deprecated SslProtocols values
+dotnet_diagnostic.CA5397.severity = none
+
+# CA5398: Avoid hardcoded SslProtocols values
+dotnet_diagnostic.CA5398.severity = none
+
+# CA5399: HttpClients should enable certificate revocation list checks
+dotnet_diagnostic.CA5399.severity = none
+
+# CA5400: Ensure HttpClient certificate revocation list check is not disabled
+dotnet_diagnostic.CA5400.severity = none
+
+# CA5401: Do not use CreateEncryptor with non-default IV
+dotnet_diagnostic.CA5401.severity = none
+
+# CA5402: Use CreateEncryptor with the default IV
+dotnet_diagnostic.CA5402.severity = none
+
+# CA5403: Do not hard-code certificate
+dotnet_diagnostic.CA5403.severity = none
+
+# CA5404: Do not disable token validation checks
+dotnet_diagnostic.CA5404.severity = none
+
+# CA5405: Do not always skip token validation in delegates
+dotnet_diagnostic.CA5405.severity = none
+
+# IL3000: Avoid using accessing Assembly file path when publishing as a single-file
+dotnet_diagnostic.IL3000.severity = none
+
+# IL3001: Avoid using accessing Assembly file path when publishing as a single-file
+dotnet_diagnostic.IL3001.severity = none
+
+# IL3002: Using member with RequiresAssemblyFilesAttribute can break functionality when embedded in a single-file app
+dotnet_diagnostic.IL3002.severity = none
+
+# RS1001: Missing diagnostic analyzer attribute
+dotnet_diagnostic.RS1001.severity = none
+
+# RS1002: Missing kind argument when registering an analyzer action
+dotnet_diagnostic.RS1002.severity = none
+
+# RS1003: Unsupported SymbolKind argument when registering a symbol analyzer action
+dotnet_diagnostic.RS1003.severity = none
+
+# RS1004: Recommend adding language support to diagnostic analyzer
+dotnet_diagnostic.RS1004.severity = none
+
+# RS1005: ReportDiagnostic invoked with an unsupported DiagnosticDescriptor
+dotnet_diagnostic.RS1005.severity = none
+
+# RS1006: Invalid type argument for DiagnosticAnalyzer's Register method
+dotnet_diagnostic.RS1006.severity = none
+
+# RS1007: Provide localizable arguments to diagnostic descriptor constructor
+dotnet_diagnostic.RS1007.severity = none
+
+# RS1008: Avoid storing per-compilation data into the fields of a diagnostic analyzer
+dotnet_diagnostic.RS1008.severity = none
+
+# RS1009: Only internal implementations of this interface are allowed
+dotnet_diagnostic.RS1009.severity = none
+
+# RS1010: Create code actions should have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1010.severity = none
+
+# RS1011: Use code actions that have a unique EquivalenceKey for FixAll occurrences support
+dotnet_diagnostic.RS1011.severity = none
+
+# RS1012: Start action has no registered actions
+dotnet_diagnostic.RS1012.severity = none
+
+# RS1013: Start action has no registered non-end actions
+dotnet_diagnostic.RS1013.severity = none
+
+# RS1014: Do not ignore values returned by methods on immutable objects
+dotnet_diagnostic.RS1014.severity = none
+
+# RS1015: Provide non-null 'helpLinkUri' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1015.severity = none
+
+# RS1016: Code fix providers should provide FixAll support
+dotnet_diagnostic.RS1016.severity = suggestion
+
+# RS1017: DiagnosticId for analyzers must be a non-null constant
+dotnet_diagnostic.RS1017.severity = none
+
+# RS1018: DiagnosticId for analyzers must be in specified format
+dotnet_diagnostic.RS1018.severity = none
+
+# RS1019: DiagnosticId must be unique across analyzers
+dotnet_diagnostic.RS1019.severity = none
+
+# RS1020: Category for analyzers must be from the specified values
+dotnet_diagnostic.RS1020.severity = none
+
+# RS1021: Invalid entry in analyzer category and diagnostic ID range specification file
+dotnet_diagnostic.RS1021.severity = none
+
+# RS1022: Do not use types from Workspaces assembly in an analyzer
+dotnet_diagnostic.RS1022.severity = none
+
+# RS1023: Upgrade MSBuildWorkspace
+dotnet_diagnostic.RS1023.severity = none
+
+# RS1024: Symbols should be compared for equality
+dotnet_diagnostic.RS1024.severity = none
+
+# RS1025: Configure generated code analysis
+dotnet_diagnostic.RS1025.severity = none
+
+# RS1026: Enable concurrent execution
+dotnet_diagnostic.RS1026.severity = none
+
+# RS1027: Types marked with DiagnosticAnalyzerAttribute(s) should inherit from DiagnosticAnalyzer
+dotnet_diagnostic.RS1027.severity = none
+
+# RS1028: Provide non-null 'customTags' value to diagnostic descriptor constructor
+dotnet_diagnostic.RS1028.severity = none
+
+# RS1029: Do not use reserved diagnostic IDs
+dotnet_diagnostic.RS1029.severity = none
+
+# RS1030: Do not invoke Compilation.GetSemanticModel() method within a diagnostic analyzer
+dotnet_diagnostic.RS1030.severity = none
+
+# RS1031: Define diagnostic title correctly
+dotnet_diagnostic.RS1031.severity = none
+
+# RS1032: Define diagnostic message correctly
+dotnet_diagnostic.RS1032.severity = none
+
+# RS1033: Define diagnostic description correctly
+dotnet_diagnostic.RS1033.severity = none
+
+# RS1034: Prefer 'IsKind' for checking syntax kinds
+dotnet_diagnostic.RS1034.severity = none
+
+# RS1035: Do not use APIs banned for analyzers
+dotnet_diagnostic.RS1035.severity = none
+
+# RS1036: Specify analyzer banned API enforcement setting
+dotnet_diagnostic.RS1036.severity = none
+
+# RS1037: Add "CompilationEnd" custom tag to compilation end diagnostic descriptor
+dotnet_diagnostic.RS1037.severity = none
+
+# RS1038: Compiler extensions should be implemented in assemblies with compiler-provided references
+dotnet_diagnostic.RS1038.severity = suggestion
+
+# RS2000: Add analyzer diagnostic IDs to analyzer release
+dotnet_diagnostic.RS2000.severity = none
+
+# RS2001: Ensure up-to-date entry for analyzer diagnostic IDs are added to analyzer release
+dotnet_diagnostic.RS2001.severity = none
+
+# RS2002: Do not add removed analyzer diagnostic IDs to unshipped analyzer release
+dotnet_diagnostic.RS2002.severity = none
+
+# RS2003: Shipped diagnostic IDs that are no longer reported should have an entry in the 'Removed Rules' table in unshipped file
+dotnet_diagnostic.RS2003.severity = none
+
+# RS2004: Diagnostic IDs marked as removed in analyzer release file should not be reported by analyzers
+dotnet_diagnostic.RS2004.severity = none
+
+# RS2005: Remove duplicate entries for diagnostic ID in the same analyzer release
+dotnet_diagnostic.RS2005.severity = none
+
+# RS2006: Remove duplicate entries for diagnostic ID between analyzer releases
+dotnet_diagnostic.RS2006.severity = none
+
+# RS2007: Invalid entry in analyzer release file
+dotnet_diagnostic.RS2007.severity = none
+
+# RS2008: Enable analyzer release tracking
+dotnet_diagnostic.RS2008.severity = none
+
+# SA0001: XML comments
+dotnet_diagnostic.SA0001.severity = none
+
+# SA1000: Spacing around keywords
+dotnet_diagnostic.SA1000.severity = none
+
+# SA1001: Commas should not be preceded by whitespace
+dotnet_diagnostic.SA1001.severity = none
+
+# SA1002: Semicolons should not be preceded by a space
+dotnet_diagnostic.SA1002.severity = none
+
+# SA1003: Operator should not appear at the end of a line
+dotnet_diagnostic.SA1003.severity = none
+
+# SA1004: Documentation line should begin with a space
+dotnet_diagnostic.SA1004.severity = none
+
+# SA1005: Single line comment should begin with a space
+dotnet_diagnostic.SA1005.severity = none
+
+# SA1008: Opening parenthesis should not be preceded by a space
+dotnet_diagnostic.SA1008.severity = none
+
+# SA1009: Closing parenthesis should not be followed by a space
+dotnet_diagnostic.SA1009.severity = none
+
+# SA1010: Opening square brackets should not be preceded by a space
+dotnet_diagnostic.SA1010.severity = none
+
+# SA1011: Closing square bracket should be followed by a space
+dotnet_diagnostic.SA1011.severity = none
+
+# SA1012: Opening brace should be followed by a space
+dotnet_diagnostic.SA1012.severity = none
+
+# SA1013: Closing brace should be preceded by a space
+dotnet_diagnostic.SA1013.severity = none
+
+# SA1014: Opening generic brackets should not be preceded by a space
+dotnet_diagnostic.SA1014.severity = none
+
+# SA1015: Closing generic bracket should not be followed by a space
+dotnet_diagnostic.SA1015.severity = none
+
+# SA1018: Nullable type symbol should not be preceded by a space
+dotnet_diagnostic.SA1018.severity = none
+
+# SA1020: Increment symbol should not be preceded by a space
+dotnet_diagnostic.SA1020.severity = none
+
+# SA1021: Negative sign should be preceded by a space
+dotnet_diagnostic.SA1021.severity = none
+
+# SA1023: Dereference symbol '*' should not be preceded by a space."
+dotnet_diagnostic.SA1023.severity = none
+
+# SA1024: Colon should be followed by a space
+dotnet_diagnostic.SA1024.severity = none
+
+# SA1025: Code should not contain multiple whitespace characters in a row
+dotnet_diagnostic.SA1025.severity = none
+
+# SA1026: Keyword followed by span or blank line
+dotnet_diagnostic.SA1026.severity = none
+
+# SA1027: Tabs and spaces should be used correctly
+dotnet_diagnostic.SA1027.severity = none
+
+# SA1028: Code should not contain trailing whitespace
+dotnet_diagnostic.SA1028.severity = none
+
+# SA1100: Do not prefix calls with base unless local implementation exists
+dotnet_diagnostic.SA1100.severity = none
+
+# SA1101: Prefix local calls with this
+dotnet_diagnostic.SA1101.severity = none
+
+# SA1102: Query clause should follow previous clause
+dotnet_diagnostic.SA1102.severity = none
+
+# SA1105: Query clauses spanning multiple lines should begin on own line
+dotnet_diagnostic.SA1105.severity = none
+
+# SA1106: Code should not contain empty statements
+dotnet_diagnostic.SA1106.severity = none
+
+# SA1107: Code should not contain multiple statements on one line
+dotnet_diagnostic.SA1107.severity = none
+
+# SA1108: Block statements should not contain embedded comments
+dotnet_diagnostic.SA1108.severity = none
+
+# SA1110: Opening parenthesis or bracket should be on declaration line
+dotnet_diagnostic.SA1110.severity = none
+
+# SA1111: Closing parenthesis should be on line of last parameter
+dotnet_diagnostic.SA1111.severity = none
+
+# SA1113: Comma should be on the same line as previous parameter
+dotnet_diagnostic.SA1113.severity = none
+
+# SA1114: Parameter list should follow declaration
+dotnet_diagnostic.SA1114.severity = none
+
+# SA1115: Parameter should begin on the line after the previous parameter
+dotnet_diagnostic.SA1115.severity = none
+
+# SA1116: Split parameters should start on line after declaration
+dotnet_diagnostic.SA1116.severity = none
+
+# SA1117: Parameters should be on same line or separate lines
+dotnet_diagnostic.SA1117.severity = none
+
+# SA1118: Parameter should not span multiple lines
+dotnet_diagnostic.SA1118.severity = none
+
+# SA1119: Statement should not use unnecessary parenthesis
+dotnet_diagnostic.SA1119.severity = none
+
+# SA1120: Comments should contain text
+dotnet_diagnostic.SA1120.severity = none
+
+# SA1121: Use built-in type alias
+dotnet_diagnostic.SA1121.severity = none
+
+# SA1122: Use string.Empty for empty strings
+dotnet_diagnostic.SA1122.severity = none
+
+# SA1123: Region should not be located within a code element
+dotnet_diagnostic.SA1123.severity = none
+
+# SA1124: Do not use regions
+dotnet_diagnostic.SA1124.severity = none
+
+# SA1125: Use shorthand for nullable types
+dotnet_diagnostic.SA1125.severity = none
+
+# SA1127: Generic type constraints should be on their own line
+dotnet_diagnostic.SA1127.severity = none
+
+# SA1128: Put constructor initializers on their own line
+dotnet_diagnostic.SA1128.severity = none
+
+# SA1129: Do not use default value type constructor
+dotnet_diagnostic.SA1129.severity = none
+
+# SA1130: Use lambda syntax
+dotnet_diagnostic.SA1130.severity = none
+
+# SA1131: Constant values should appear on the right-hand side of comparisons
+dotnet_diagnostic.SA1131.severity = none
+
+# SA1132: Do not combine fields
+dotnet_diagnostic.SA1132.severity = none
+
+# SA1133: Do not combine attributes
+dotnet_diagnostic.SA1133.severity = none
+
+# SA1134: Each attribute should be placed on its own line of code
+dotnet_diagnostic.SA1134.severity = none
+
+# SA1135: Using directive should be qualified
+dotnet_diagnostic.SA1135.severity = none
+
+# SA1136: Enum values should be on separate lines
+dotnet_diagnostic.SA1136.severity = none
+
+# SA1137: Elements should have the same indentation
+dotnet_diagnostic.SA1137.severity = none
+
+# SA1139: Use literal suffix notation instead of casting
+dotnet_diagnostic.SA1139.severity = none
+
+# SA1141: Use tuple syntax
+dotnet_diagnostic.SA1141.severity = none
+
+# SA1142: Refer to tuple elements by name
+dotnet_diagnostic.SA1142.severity = none
+
+# SA1200: Using directive should appear within a namespace declaration
+dotnet_diagnostic.SA1200.severity = none
+
+# SA1201: Elements should appear in the correct order
+dotnet_diagnostic.SA1201.severity = none
+
+# SA1202: Elements should be ordered by access
+dotnet_diagnostic.SA1202.severity = none
+
+# SA1203: Constants should appear before fields
+dotnet_diagnostic.SA1203.severity = none
+
+# SA1204: Static elements should appear before instance elements
+dotnet_diagnostic.SA1204.severity = none
+
+# SA1205: Partial elements should declare an access modifier
+dotnet_diagnostic.SA1205.severity = none
+
+# SA1206: Keyword ordering
+dotnet_diagnostic.SA1206.severity = none
+
+# SA1208: Using directive ordering
+dotnet_diagnostic.SA1208.severity = none
+
+# SA1209: Using alias directives should be placed after all using namespace directives
+dotnet_diagnostic.SA1209.severity = none
+
+# SA1210: Using directives should be ordered alphabetically by the namespaces
+dotnet_diagnostic.SA1210.severity = none
+
+# SA1211: Using alias directive ordering
+dotnet_diagnostic.SA1211.severity = none
+
+# SA1212: A get accessor appears after a set accessor within a property or indexer
+dotnet_diagnostic.SA1212.severity = none
+
+# SA1214: Readonly fields should appear before non-readonly fields
+dotnet_diagnostic.SA1214.severity = none
+
+# SA1216: Using static directives should be placed at the correct location
+dotnet_diagnostic.SA1216.severity = none
+
+# SA1300: Element should begin with an uppercase letter
+dotnet_diagnostic.SA1300.severity = none
+
+# SA1302: Interface names should begin with I
+dotnet_diagnostic.SA1302.severity = none
+
+# SA1303: Const field names should begin with upper-case letter
+dotnet_diagnostic.SA1303.severity = none
+
+# SA1304: Non-private readonly fields should begin with upper-case letter
+dotnet_diagnostic.SA1304.severity = none
+
+# SA1306: Field should begin with lower-case letter
+dotnet_diagnostic.SA1306.severity = none
+
+# SA1307: Field should begin with upper-case letter
+dotnet_diagnostic.SA1307.severity = none
+
+# SA1308: Field should not begin with the prefix 's_'
+dotnet_diagnostic.SA1308.severity = none
+
+# SA1309: Field names should not begin with underscore
+dotnet_diagnostic.SA1309.severity = none
+
+# SA1310: Field should not contain an underscore
+dotnet_diagnostic.SA1310.severity = none
+
+# SA1311: Static readonly fields should begin with upper-case letter
+dotnet_diagnostic.SA1311.severity = none
+
+# SA1312: Variable should begin with lower-case letter
+dotnet_diagnostic.SA1312.severity = none
+
+# SA1313: Parameter should begin with lower-case letter
+dotnet_diagnostic.SA1313.severity = none
+
+# SA1314: Type parameter names should begin with T
+dotnet_diagnostic.SA1314.severity = none
+
+# SA1316: Tuple element names should use correct casing
+dotnet_diagnostic.SA1316.severity = none
+
+# SA1400: Member should declare an access modifier
+dotnet_diagnostic.SA1400.severity = none
+
+# SA1401: Fields should be private
+dotnet_diagnostic.SA1401.severity = none
+
+# SA1402: File may only contain a single type
+dotnet_diagnostic.SA1402.severity = none
+
+# SA1403: File may only contain a single namespace
+dotnet_diagnostic.SA1403.severity = none
+
+# SA1404: Code analysis suppression should have justification
+dotnet_diagnostic.SA1404.severity = none
+
+# SA1405: Debug.Assert should provide message text
+dotnet_diagnostic.SA1405.severity = none
+
+# SA1407: Arithmetic expressions should declare precedence
+dotnet_diagnostic.SA1407.severity = none
+
+# SA1408: Conditional expressions should declare precedence
+dotnet_diagnostic.SA1408.severity = none
+
+# SA1410: Remove delegate parens when possible
+dotnet_diagnostic.SA1410.severity = none
+
+# SA1411: Attribute constructor shouldn't use unnecessary parenthesis
+dotnet_diagnostic.SA1411.severity = none
+
+# SA1413: Use trailing comma in multi-line initializers
+dotnet_diagnostic.SA1413.severity = none
+
+# SA1414: Tuple types in signatures should have element names
+dotnet_diagnostic.SA1414.severity = none
+
+# SA1500: Braces for multi-line statements should not share line
+dotnet_diagnostic.SA1500.severity = none
+
+# SA1501: Statement should not be on a single line
+dotnet_diagnostic.SA1501.severity = none
+
+# SA1502: Element should not be on a single line
+dotnet_diagnostic.SA1502.severity = none
+
+# SA1503: Braces should not be omitted
+dotnet_diagnostic.SA1503.severity = none
+
+# SA1504: All accessors should be single-line or multi-line
+dotnet_diagnostic.SA1504.severity = none
+
+# SA1505: An opening brace should not be followed by a blank line
+dotnet_diagnostic.SA1505.severity = none
+
+# SA1506: Element documentation headers should not be followed by blank line
+dotnet_diagnostic.SA1506.severity = none
+
+# SA1507: Code should not contain multiple blank lines in a row
+dotnet_diagnostic.SA1507.severity = none
+
+# SA1508: A closing brace should not be preceded by a blank line
+dotnet_diagnostic.SA1508.severity = none
+
+# SA1509: Opening braces should not be preceded by blank line
+dotnet_diagnostic.SA1509.severity = none
+
+# SA1510: 'else' statement should not be preceded by a blank line
+dotnet_diagnostic.SA1510.severity = none
+
+# SA1512: Single-line comments should not be followed by blank line
+dotnet_diagnostic.SA1512.severity = none
+
+# SA1513: Closing brace should be followed by blank line
+dotnet_diagnostic.SA1513.severity = none
+
+# SA1514: Element documentation header should be preceded by blank line
+dotnet_diagnostic.SA1514.severity = none
+
+# SA1515: Single-line comment should be preceded by blank line
+dotnet_diagnostic.SA1515.severity = none
+
+# SA1516: Elements should be separated by blank line
+dotnet_diagnostic.SA1516.severity = none
+
+# SA1517: Code should not contain blank lines at start of file
+dotnet_diagnostic.SA1517.severity = none
+
+# SA1518: Code should not contain blank lines at the end of the file
+dotnet_diagnostic.SA1518.severity = none
+
+# SA1519: Braces should not be omitted from multi-line child statement
+dotnet_diagnostic.SA1519.severity = none
+
+# SA1520: Use braces consistently
+dotnet_diagnostic.SA1520.severity = none
+
+# SA1600: Elements should be documented
+dotnet_diagnostic.SA1600.severity = none
+
+# SA1601: Partial elements should be documented
+dotnet_diagnostic.SA1601.severity = none
+
+# SA1602: Enumeration items should be documented
+dotnet_diagnostic.SA1602.severity = none
+
+# SA1604: Element documentation should have summary
+dotnet_diagnostic.SA1604.severity = none
+
+# SA1605: Partial element documentation should have summary
+dotnet_diagnostic.SA1605.severity = none
+
+# SA1606: Element documentation should have summary text
+dotnet_diagnostic.SA1606.severity = none
+
+# SA1608: Element documentation should not have default summary
+dotnet_diagnostic.SA1608.severity = none
+
+# SA1610: Property documentation should have value text
+dotnet_diagnostic.SA1610.severity = none
+
+# SA1611: The documentation for parameter 'message' is missing
+dotnet_diagnostic.SA1611.severity = none
+
+# SA1612: The parameter documentation is at incorrect position
+dotnet_diagnostic.SA1612.severity = none
+
+# SA1614: Element parameter documentation should have text
+dotnet_diagnostic.SA1614.severity = none
+
+# SA1615: Element return value should be documented
+dotnet_diagnostic.SA1615.severity = none
+
+# SA1616: Element return value documentation should have text
+dotnet_diagnostic.SA1616.severity = none
+
+# SA1618: The documentation for type parameter is missing
+dotnet_diagnostic.SA1618.severity = none
+
+# SA1619: The documentation for type parameter is missing
+dotnet_diagnostic.SA1619.severity = none
+
+# SA1622: Generic type parameter documentation should have text
+dotnet_diagnostic.SA1622.severity = none
+
+# SA1623: Property documentation text
+dotnet_diagnostic.SA1623.severity = none
+
+# SA1624: Because the property only contains a visible get accessor, the documentation summary text should begin with 'Gets'
+dotnet_diagnostic.SA1624.severity = none
+
+# SA1625: Element documentation should not be copied and pasted
+dotnet_diagnostic.SA1625.severity = none
+
+# SA1626: Single-line comments should not use documentation style slashes
+dotnet_diagnostic.SA1626.severity = none
+
+# SA1627: The documentation text within the \'exception\' tag should not be empty
+dotnet_diagnostic.SA1627.severity = none
+
+# SA1629: Documentation text should end with a period
+dotnet_diagnostic.SA1629.severity = none
+
+# SA1633: File should have header
+dotnet_diagnostic.SA1633.severity = none
+
+# SA1642: Constructor summary documentation should begin with standard text
+dotnet_diagnostic.SA1642.severity = none
+
+# SA1643: Destructor summary documentation should begin with standard text
+dotnet_diagnostic.SA1643.severity = none
+
+# SA1649: File name should match first type name
+dotnet_diagnostic.SA1649.severity = none
+
+# IDE0001: Simplify name
+dotnet_diagnostic.IDE0001.severity = silent
+
+# IDE0002: Simplify member access
+dotnet_diagnostic.IDE0002.severity = silent
+
+# IDE0003: Remove this or Me qualification
+dotnet_diagnostic.IDE0003.severity = silent
+
+# IDE0004: Remove Unnecessary Cast
+dotnet_diagnostic.IDE0004.severity = silent
+
+# IDE0005: Using directive is unnecessary.
+dotnet_diagnostic.IDE0005.severity = silent
+
+# IDE0007: Use implicit type
+dotnet_diagnostic.IDE0007.severity = silent
+
+# IDE0008: Use explicit type
+dotnet_diagnostic.IDE0008.severity = silent
+
+# IDE0009: Add this or Me qualification
+dotnet_diagnostic.IDE0009.severity = silent
+
+# IDE0010: Add missing cases
+dotnet_diagnostic.IDE0010.severity = silent
+
+# IDE0011: Add braces
+dotnet_diagnostic.IDE0011.severity = silent
+
+# IDE0016: Use 'throw' expression
+dotnet_diagnostic.IDE0016.severity = silent
+
+# IDE0017: Simplify object initialization
+dotnet_diagnostic.IDE0017.severity = silent
+
+# IDE0018: Inline variable declaration
+dotnet_diagnostic.IDE0018.severity = silent
+
+# IDE0019: Use pattern matching to avoid as followed by a null check
+dotnet_diagnostic.IDE0019.severity = silent
+
+# IDE0020: Use pattern matching to avoid is check followed by a cast (with variable)
+dotnet_diagnostic.IDE0020.severity = silent
+
+# IDE0021: Use expression body for constructors
+dotnet_diagnostic.IDE0021.severity = silent
+
+# IDE0022: Use expression body for methods
+dotnet_diagnostic.IDE0022.severity = silent
+
+# IDE0023: Use expression body for operators
+dotnet_diagnostic.IDE0023.severity = silent
+
+# IDE0024: Use expression body for operators
+dotnet_diagnostic.IDE0024.severity = silent
+
+# IDE0025: Use expression body for properties
+dotnet_diagnostic.IDE0025.severity = silent
+
+# IDE0026: Use expression body for indexers
+dotnet_diagnostic.IDE0026.severity = silent
+
+# IDE0027: Use expression body for accessors
+dotnet_diagnostic.IDE0027.severity = silent
+
+# IDE0028: Simplify collection initialization
+dotnet_diagnostic.IDE0028.severity = silent
+
+# IDE0029: Use coalesce expression
+dotnet_diagnostic.IDE0029.severity = silent
+
+# IDE0030: Use coalesce expression
+dotnet_diagnostic.IDE0030.severity = silent
+
+# IDE0031: Use null propagation
+dotnet_diagnostic.IDE0031.severity = silent
+
+# IDE0032: Use auto property
+dotnet_diagnostic.IDE0032.severity = silent
+
+# IDE0033: Use explicitly provided tuple name
+dotnet_diagnostic.IDE0033.severity = silent
+
+# IDE0034: Simplify 'default' expression
+dotnet_diagnostic.IDE0034.severity = silent
+
+# IDE0035: Remove unreachable code
+dotnet_diagnostic.IDE0035.severity = silent
+
+# IDE0036: Order modifiers
+dotnet_diagnostic.IDE0036.severity = silent
+
+# IDE0037: Use inferred member name
+dotnet_diagnostic.IDE0037.severity = silent
+
+# IDE0038: Use pattern matching to avoid is check followed by a cast (without variable)
+dotnet_diagnostic.IDE0038.severity = silent
+
+# IDE0039: Use local function
+dotnet_diagnostic.IDE0039.severity = silent
+
+# IDE0040: Add accessibility modifiers
+dotnet_diagnostic.IDE0040.severity = silent
+
+# IDE0041: Use 'is null' check
+dotnet_diagnostic.IDE0041.severity = silent
+
+# IDE0042: Deconstruct variable declaration
+dotnet_diagnostic.IDE0042.severity = silent
+
+# IDE0043: Invalid format string
+dotnet_diagnostic.IDE0043.severity = silent
+
+# IDE0044: Add readonly modifier
+dotnet_diagnostic.IDE0044.severity = silent
+
+# IDE0045: Use conditional expression for assignment
+dotnet_diagnostic.IDE0045.severity = silent
+
+# IDE0046: Use conditional expression for return
+dotnet_diagnostic.IDE0046.severity = silent
+
+# IDE0047: Remove unnecessary parentheses
+dotnet_diagnostic.IDE0047.severity = silent
+
+# IDE0048: Add parentheses for clarity
+dotnet_diagnostic.IDE0048.severity = silent
+
+# IDE0049: Use language keywords instead of framework type names for type references
+dotnet_diagnostic.IDE0049.severity = silent
+
+# IDE0051: Remove unused private members
+dotnet_diagnostic.IDE0051.severity = silent
+
+# IDE0052: Remove unread private members
+dotnet_diagnostic.IDE0052.severity = silent
+
+# IDE0053: Use expression body for lambdas
+dotnet_diagnostic.IDE0053.severity = silent
+
+# IDE0054: Use compound assignment
+dotnet_diagnostic.IDE0054.severity = silent
+
+# IDE0055: Fix formatting
+dotnet_diagnostic.IDE0055.severity = silent
+
+# IDE0056: Use index operator
+dotnet_diagnostic.IDE0056.severity = silent
+
+# IDE0057: Use range operator
+dotnet_diagnostic.IDE0057.severity = silent
+
+# IDE0058: Expression value is never used
+dotnet_diagnostic.IDE0058.severity = silent
+
+# IDE0059: Unnecessary assignment of a value
+dotnet_diagnostic.IDE0059.severity = silent
+
+# IDE0060: Remove unused parameter
+dotnet_diagnostic.IDE0060.severity = silent
+
+# IDE0061: Use expression body for local functions
+dotnet_diagnostic.IDE0061.severity = silent
+
+# IDE0062: Make local function 'static'
+dotnet_diagnostic.IDE0062.severity = silent
+
+# IDE0063: Use simple 'using' statement
+dotnet_diagnostic.IDE0063.severity = silent
+
+# IDE0064: Make readonly fields writable
+dotnet_diagnostic.IDE0064.severity = silent
+
+# IDE0065: Misplaced using directive
+dotnet_diagnostic.IDE0065.severity = silent
+
+# IDE0066: Convert switch statement to expression
+dotnet_diagnostic.IDE0066.severity = silent
+
+# IDE0070: Use 'System.HashCode'
+dotnet_diagnostic.IDE0070.severity = silent
+
+# IDE0071: Simplify interpolation
+dotnet_diagnostic.IDE0071.severity = silent
+
+# IDE0072: Add missing cases
+dotnet_diagnostic.IDE0072.severity = silent
+
+# IDE0073: The file header is missing or not located at the top of the file
+dotnet_diagnostic.IDE0073.severity = silent
+
+# IDE0074: Use compound assignment
+dotnet_diagnostic.IDE0074.severity = silent
+
+# IDE0075: Simplify conditional expression
+dotnet_diagnostic.IDE0075.severity = silent
+
+# IDE0076: Invalid global 'SuppressMessageAttribute'
+dotnet_diagnostic.IDE0076.severity = silent
+
+# IDE0077: Avoid legacy format target in 'SuppressMessageAttribute'
+dotnet_diagnostic.IDE0077.severity = silent
+
+# IDE0078: Use pattern matching
+dotnet_diagnostic.IDE0078.severity = silent
+
+# IDE0079: RemoveUnnecessarySuppression
+dotnet_diagnostic.IDE0079.severity = silent
+
+# IDE0080: Remove unnecessary suppression operator
+dotnet_diagnostic.IDE0080.severity = silent
+
+# IDE0081: RemoveUnnecessaryByVal
+dotnet_diagnostic.IDE0081.severity = silent
+
+# IDE0082: 'typeof' can be converted to 'nameof'
+dotnet_diagnostic.IDE0082.severity = silent
+
+# IDE0083: Use pattern matching
+dotnet_diagnostic.IDE0083.severity = silent
+
+# IDE0084: Use pattern matching (IsNot operator)
+dotnet_diagnostic.IDE0084.severity = silent
+
+# IDE0090: Use 'new(...)'
+dotnet_diagnostic.IDE0090.severity = silent
+
+# IDE0100: Remove redundant equality
+dotnet_diagnostic.IDE0100.severity = silent
+
+# IDE0110: Remove unnecessary discard
+dotnet_diagnostic.IDE0110.severity = silent
+
+# IDE0120: Simplify LINQ expression
+dotnet_diagnostic.IDE0120.severity = silent
+
+# IDE0130: Namespace does not match folder structure
+dotnet_diagnostic.IDE0130.severity = silent
+
+# IDE0140: Simplify object creation
+dotnet_diagnostic.IDE0140.severity = silent
+
+# IDE0150: Prefer 'null' check over type check
+dotnet_diagnostic.IDE0150.severity = silent
+
+# IDE0160: Convert to block scoped namespace
+dotnet_diagnostic.IDE0160.severity = silent
+
+# IDE0161: Convert to file-scoped namespace
+dotnet_diagnostic.IDE0161.severity = silent
+
+# IDE0170: Simplify property pattern
+dotnet_diagnostic.IDE0170.severity = silent
+
+# IDE0180: Use tuple swap
+dotnet_diagnostic.IDE0180.severity = silent
+
+# IDE0200: Remove unnecessary lambda expression
+dotnet_diagnostic.IDE0200.severity = silent
+
+# IDE0210: Use top-level statements
+dotnet_diagnostic.IDE0210.severity = silent
+
+# IDE0211: Convert to 'Program.Main' style program
+dotnet_diagnostic.IDE0211.severity = silent
+
+# IDE0220: foreach cast
+dotnet_diagnostic.IDE0220.severity = silent
+
+# IDE0230: Use UTF8 string literal
+dotnet_diagnostic.IDE0230.severity = silent
+
+# IDE0240: Remove redundant nullable directive
+dotnet_diagnostic.IDE0240.severity = silent
+
+# IDE0241: Remove unnecessary nullable directive
+dotnet_diagnostic.IDE0241.severity = silent
+
+# IDE0250: Make struct readonly
+dotnet_diagnostic.IDE0250.severity = silent
+
+# IDE0251: Make member readonly
+dotnet_diagnostic.IDE0251.severity = silent
+
+# IDE0260: Use pattern matching
+dotnet_diagnostic.IDE0260.severity = silent
+
+# IDE0270: Use coalesce expression
+dotnet_diagnostic.IDE0270.severity = silent
+
+# IDE0280: Use 'nameof'
+dotnet_diagnostic.IDE0280.severity = silent
+
+# IDE0290: Use primary constructor
+dotnet_diagnostic.IDE0290.severity = silent
+
+# IDE0300: Use collection expression for array
+dotnet_diagnostic.IDE0300.severity = silent
+
+# IDE0301: Use collection expression for empty
+dotnet_diagnostic.IDE0301.severity = silent
+
+# IDE0302: Use collection expression for stackalloc
+dotnet_diagnostic.IDE0302.severity = silent
+
+# IDE0303: Use collection expression for Create()
+dotnet_diagnostic.IDE0303.severity = silent
+
+# IDE0304: Use collection expression for builder
+dotnet_diagnostic.IDE0304.severity = silent
+
+# IDE0305: Use collection expression for fluent
+dotnet_diagnostic.IDE0305.severity = silent
+
+# IDE1005: Delegate invocation can be simplified.
+dotnet_diagnostic.IDE1005.severity = silent
+
+# IDE1006: Naming Styles
+dotnet_diagnostic.IDE1006.severity = silent
+
+# IDE2000: C#
+dotnet_diagnostic.IDE2000.severity = silent
+
+# IDE2001: Embedded statements must be on their own line
+dotnet_diagnostic.IDE2001.severity = silent
+
+# IDE2002: Consecutive braces must not have blank line between them
+dotnet_diagnostic.IDE2002.severity = silent
+
+# IDE2003: C#
+dotnet_diagnostic.IDE2003.severity = silent
+
+# IDE2004: Blank line not allowed after constructor initializer colon
+dotnet_diagnostic.IDE2004.severity = silent
+
+# IDE2005: Blank line not allowed after conditional expression token
+dotnet_diagnostic.IDE2005.severity = silent
+
+# IDE2006: Blank line not allowed after arrow expression clause token
+dotnet_diagnostic.IDE2006.severity = silent
+
+# xUnit1000: Test classes must be public
+dotnet_diagnostic.xUnit1000.severity = warning
+
+# xUnit1001: Fact methods cannot have parameters
+dotnet_diagnostic.xUnit1001.severity = warning
+
+# xUnit1002: Test methods cannot have multiple Fact or Theory attributes
+dotnet_diagnostic.xUnit1002.severity = warning
+
+# xUnit1003: Theory methods must have test data
+dotnet_diagnostic.xUnit1003.severity = warning
+
+# xUnit1004: Test methods should not be skipped
+# dotnet_diagnostic.xUnit1004.severity = warning
+
+# xUnit1005: Fact methods should not have test data
+dotnet_diagnostic.xUnit1005.severity = warning
+
+# xUnit1006: Theory methods should have parameters
+dotnet_diagnostic.xUnit1006.severity = warning
+
+# xUnit1007: ClassData must point at a valid class
+dotnet_diagnostic.xUnit1007.severity = warning
+
+# xUnit1008: Test data attribute should only be used on a Theory
+dotnet_diagnostic.xUnit1008.severity = warning
+
+# xUnit1009: InlineData must match the number of method parameters
+dotnet_diagnostic.xUnit1009.severity = warning
+
+# xUnit1010: The value is not convertible to the method parameter type
+dotnet_diagnostic.xUnit1010.severity = warning
+
+# xUnit1011: There is no matching method parameter
+dotnet_diagnostic.xUnit1011.severity = warning
+
+# xUnit1012: Null should not be used for value type parameters
+dotnet_diagnostic.xUnit1012.severity = warning
+
+# xUnit1013: Public methods should be marked as test
+dotnet_diagnostic.xUnit1013.severity = warning
+
+# xUnit1014: MemberData should use nameof operator for member name
+dotnet_diagnostic.xUnit1014.severity = warning
+
+# xUnit1015: MemberData must reference an existing member
+dotnet_diagnostic.xUnit1015.severity = warning
+
+# xUnit1016: MemberData must reference a public member
+dotnet_diagnostic.xUnit1016.severity = warning
+
+# xUnit1017: MemberData must reference a static member
+dotnet_diagnostic.xUnit1017.severity = warning
+
+# xUnit1018: MemberData must reference a valid member kind
+dotnet_diagnostic.xUnit1018.severity = warning
+
+# xUnit1019: MemberData must reference a member providing a valid data type
+dotnet_diagnostic.xUnit1019.severity = warning
+
+# xUnit1020: MemberData must reference a property with a getter
+dotnet_diagnostic.xUnit1020.severity = warning
+
+# xUnit1021: MemberData should not have parameters if the referenced member is not a method
+dotnet_diagnostic.xUnit1021.severity = warning
+
+# xUnit1022: Theory methods cannot have a parameter array
+dotnet_diagnostic.xUnit1022.severity = warning
+
+# xUnit1023: Theory methods cannot have default parameter values
+dotnet_diagnostic.xUnit1023.severity = warning
+
+# xUnit1024: Test methods cannot have overloads
+dotnet_diagnostic.xUnit1024.severity = warning
+
+# xUnit1025: InlineData should be unique within the Theory it belongs to
+dotnet_diagnostic.xUnit1025.severity = warning
+
+# xUnit1026: Theory methods should use all of their parameters
+dotnet_diagnostic.xUnit1026.severity = warning
+
+# xUnit1030: Test methods should not call ConfigureAwait(), as it may bypass parallelization limits.
+dotnet_diagnostic.xUnit1030.severity = none
+
+# xUnit1031: Test methods must not use blocking task operations, as they can cause deadlocks. Use an async test method and await instead.
+dotnet_diagnostic.xUnit1031.severity = none
+
+# xUnit2000: Constants and literals should be the expected argument
+dotnet_diagnostic.xUnit2000.severity = warning
+
+# xUnit2001: Do not use invalid equality check
+dotnet_diagnostic.xUnit2001.severity = warning
+
+# xUnit2002: Do not use null check on value type
+dotnet_diagnostic.xUnit2002.severity = warning
+
+# xUnit2003: Do not use equality check to test for null value
+dotnet_diagnostic.xUnit2003.severity = warning
+
+# xUnit2004: Do not use equality check to test for boolean conditions
+dotnet_diagnostic.xUnit2004.severity = warning
+
+# xUnit2005: Do not use identity check on value type
+dotnet_diagnostic.xUnit2005.severity = warning
+
+# xUnit2006: Do not use invalid string equality check
+dotnet_diagnostic.xUnit2006.severity = warning
+
+# xUnit2007: Do not use typeof expression to check the type
+dotnet_diagnostic.xUnit2007.severity = warning
+
+# xUnit2008: Do not use boolean check to match on regular expressions
+dotnet_diagnostic.xUnit2008.severity = warning
+
+# xUnit2009: Do not use boolean check to check for substrings
+dotnet_diagnostic.xUnit2009.severity = warning
+
+# xUnit2010: Do not use boolean check to check for string equality
+dotnet_diagnostic.xUnit2010.severity = warning
+
+# xUnit2011: Do not use empty collection check
+dotnet_diagnostic.xUnit2011.severity = warning
+
+# xUnit2012: Do not use Enumerable.Any() to check if a value exists in a collection
+dotnet_diagnostic.xUnit2012.severity = warning
+
+# xUnit2013: Do not use equality check to check for collection size.
+dotnet_diagnostic.xUnit2013.severity = none
+
+# xUnit2014: Do not use throws check to check for asynchronously thrown exception
+dotnet_diagnostic.xUnit2014.severity = none
+
+# xUnit2015: Do not use typeof expression to check the exception type
+dotnet_diagnostic.xUnit2015.severity = warning
+
+# xUnit2016: Keep precision in the allowed range when asserting equality of doubles or decimals
+dotnet_diagnostic.xUnit2016.severity = warning
+
+# xUnit2017: Do not use Contains() to check if a value exists in a collection
+dotnet_diagnostic.xUnit2017.severity = none
+
+# xUnit2018: Do not compare an object's exact type to an abstract class or interface
+dotnet_diagnostic.xUnit2018.severity = warning
+
+# xUnit2019: Do not use obsolete throws check to check for asynchronously thrown exception
+dotnet_diagnostic.xUnit2019.severity = warning
+
+# xUnit3000: Test case classes must derive directly or indirectly from Xunit.LongLivedMarshalByRefObject
+dotnet_diagnostic.xUnit3000.severity = warning
+
+# xUnit3001: Classes that implement Xunit.Abstractions.IXunitSerializable must have a public parameterless constructor
+dotnet_diagnostic.xUnit3001.severity = warning
diff --git a/samples/Directory.Build.props b/samples/Directory.Build.props
index e2c532597..2114a39a0 100644
--- a/samples/Directory.Build.props
+++ b/samples/Directory.Build.props
@@ -4,6 +4,7 @@
+ truefalsefalse
diff --git a/samples/KubernetesIngress.Sample/backend/Program.cs b/samples/KubernetesIngress.Sample/backend/Program.cs
index 4bcc7cbaf..698feab88 100644
--- a/samples/KubernetesIngress.Sample/backend/Program.cs
+++ b/samples/KubernetesIngress.Sample/backend/Program.cs
@@ -26,7 +26,7 @@
app.Run();
-internal class BackendInfo
+internal sealed class BackendInfo
{
public string IP { get; set; } = default!;
diff --git a/samples/ReverseProxy.Auth.Sample/TokenService.cs b/samples/ReverseProxy.Auth.Sample/TokenService.cs
index fa7db8c95..c703de186 100644
--- a/samples/ReverseProxy.Auth.Sample/TokenService.cs
+++ b/samples/ReverseProxy.Auth.Sample/TokenService.cs
@@ -7,7 +7,7 @@
namespace Yarp.Sample
{
- internal class TokenService
+ internal sealed class TokenService
{
internal Task GetAuthTokenAsync(ClaimsPrincipal user)
{
diff --git a/samples/ReverseProxy.Direct.Sample/Program.cs b/samples/ReverseProxy.Direct.Sample/Program.cs
index 8f3cb470a..86534aa80 100644
--- a/samples/ReverseProxy.Direct.Sample/Program.cs
+++ b/samples/ReverseProxy.Direct.Sample/Program.cs
@@ -77,7 +77,7 @@
///
/// Custom request transformation
///
-internal class CustomTransformer : HttpTransformer
+internal sealed class CustomTransformer : HttpTransformer
{
///
/// A callback that is invoked prior to sending the proxied request. All HttpRequestMessage
diff --git a/samples/ReverseProxy.Transforms.Sample/MyTransformFactory.cs b/samples/ReverseProxy.Transforms.Sample/MyTransformFactory.cs
index edeb51125..d39cd4ef5 100644
--- a/samples/ReverseProxy.Transforms.Sample/MyTransformFactory.cs
+++ b/samples/ReverseProxy.Transforms.Sample/MyTransformFactory.cs
@@ -9,7 +9,7 @@
namespace Yarp.Sample
{
- internal class MyTransformFactory : ITransformFactory
+ internal sealed class MyTransformFactory : ITransformFactory
{
public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionary transformValues)
{
diff --git a/samples/ReverseProxy.Transforms.Sample/MyTransformProvider.cs b/samples/ReverseProxy.Transforms.Sample/MyTransformProvider.cs
index b585c0b3f..98caf6cd5 100644
--- a/samples/ReverseProxy.Transforms.Sample/MyTransformProvider.cs
+++ b/samples/ReverseProxy.Transforms.Sample/MyTransformProvider.cs
@@ -8,7 +8,7 @@
namespace Yarp.Sample
{
- internal class MyTransformProvider : ITransformProvider
+ internal sealed class MyTransformProvider : ITransformProvider
{
public void ValidateRoute(TransformRouteValidationContext context)
{
diff --git a/samples/ReverseProxy.Transforms.Sample/TokenService.cs b/samples/ReverseProxy.Transforms.Sample/TokenService.cs
index b309fce95..6129ac887 100644
--- a/samples/ReverseProxy.Transforms.Sample/TokenService.cs
+++ b/samples/ReverseProxy.Transforms.Sample/TokenService.cs
@@ -6,7 +6,7 @@
namespace Yarp.Sample
{
- internal class TokenService
+ internal sealed class TokenService
{
internal Task GetAuthTokenAsync(ClaimsPrincipal user)
{
diff --git a/src/Kubernetes.Controller/Caching/Endpoints.cs b/src/Kubernetes.Controller/Caching/Endpoints.cs
index 323c30c45..cec9727bd 100644
--- a/src/Kubernetes.Controller/Caching/Endpoints.cs
+++ b/src/Kubernetes.Controller/Caching/Endpoints.cs
@@ -10,9 +10,7 @@ namespace Yarp.Kubernetes.Controller.Caching;
///
/// Holds data needed from a resource.
///
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct Endpoints
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public Endpoints(V1Endpoints endpoints)
{
diff --git a/src/Kubernetes.Controller/Caching/IngressCache.cs b/src/Kubernetes.Controller/Caching/IngressCache.cs
index 3ea272320..25cad0edc 100644
--- a/src/Kubernetes.Controller/Caching/IngressCache.cs
+++ b/src/Kubernetes.Controller/Caching/IngressCache.cs
@@ -47,12 +47,10 @@ public void Update(WatchEventType eventType, V1IngressClass ingressClass)
if (!string.Equals(_options.ControllerClass, ingressClass.Spec.Controller, StringComparison.OrdinalIgnoreCase))
{
-#pragma warning disable CA1303 // Do not pass literals as localized parameters
_logger.LogInformation(
"Ignoring {IngressClassNamespace}/{IngressClassName} as the spec.controller is not the same as this ingress",
ingressClass.Metadata.NamespaceProperty,
ingressClass.Metadata.Name);
-#pragma warning restore CA1303 // Do not pass literals as localized parameters
return;
}
diff --git a/src/Kubernetes.Controller/Caching/IngressClassData.cs b/src/Kubernetes.Controller/Caching/IngressClassData.cs
index de2f224ea..c0aa0b379 100644
--- a/src/Kubernetes.Controller/Caching/IngressClassData.cs
+++ b/src/Kubernetes.Controller/Caching/IngressClassData.cs
@@ -9,9 +9,7 @@ namespace Yarp.Kubernetes.Controller.Caching;
///
/// Holds data needed from a resource.
///
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct IngressClassData
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public IngressClassData(V1IngressClass ingressClass)
{
diff --git a/src/Kubernetes.Controller/Caching/IngressData.cs b/src/Kubernetes.Controller/Caching/IngressData.cs
index 09065c29d..1930ae90c 100644
--- a/src/Kubernetes.Controller/Caching/IngressData.cs
+++ b/src/Kubernetes.Controller/Caching/IngressData.cs
@@ -9,9 +9,7 @@ namespace Yarp.Kubernetes.Controller.Caching;
///
/// Holds data needed from a resource.
///
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct IngressData
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public IngressData(V1Ingress ingress)
{
diff --git a/src/Kubernetes.Controller/Caching/ServiceData.cs b/src/Kubernetes.Controller/Caching/ServiceData.cs
index b54a50bfe..f1b374b85 100644
--- a/src/Kubernetes.Controller/Caching/ServiceData.cs
+++ b/src/Kubernetes.Controller/Caching/ServiceData.cs
@@ -9,9 +9,7 @@ namespace Yarp.Kubernetes.Controller.Caching;
///
/// Holds data needed from a resource.
///
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct ServiceData
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public ServiceData(V1Service service)
{
diff --git a/src/Kubernetes.Controller/Client/ResourceInformer.cs b/src/Kubernetes.Controller/Client/ResourceInformer.cs
index bb1e150bc..015d9bd9b 100644
--- a/src/Kubernetes.Controller/Client/ResourceInformer.cs
+++ b/src/Kubernetes.Controller/Client/ResourceInformer.cs
@@ -37,7 +37,7 @@ public abstract class ResourceInformer : BackgroundHos
private readonly SemaphoreSlim _start = new SemaphoreSlim(0);
private readonly ResourceSelector _selector;
private ImmutableList _registrations = ImmutableList.Empty;
- private IDictionary> _cache = new Dictionary>();
+ private Dictionary> _cache = [];
private string _lastResourceVersion;
///
@@ -410,11 +410,7 @@ private void InvokeRegistrationCallbacks(WatchEventType eventType, TResource res
}
catch (Exception innerException)
{
- if (innerExceptions is null)
- {
- innerExceptions = new List();
- }
-
+ innerExceptions ??= new List();
innerExceptions.Add(innerException);
}
}
diff --git a/src/Kubernetes.Controller/ConfigProvider/KubernetesConfigProvider.cs b/src/Kubernetes.Controller/ConfigProvider/KubernetesConfigProvider.cs
index 240aa6a49..caea9003a 100644
--- a/src/Kubernetes.Controller/ConfigProvider/KubernetesConfigProvider.cs
+++ b/src/Kubernetes.Controller/ConfigProvider/KubernetesConfigProvider.cs
@@ -30,9 +30,7 @@ public Task UpdateAsync(IReadOnlyList routes, IReadOnlyList
/// Initializes a new instance of the class.
@@ -69,7 +67,7 @@ protected BackgroundHostedService(
public Task StartAsync(CancellationToken cancellationToken)
{
// fork off a new async causality line beginning with the call to RunAsync
- _runTask = Task.Run(CallRunAsync);
+ _runTask = Task.Run(CallRunAsync, CancellationToken.None);
// the rest of the startup sequence should proceed without delay
return Task.CompletedTask;
diff --git a/src/Kubernetes.Controller/Management/KubernetesCoreExtensions.cs b/src/Kubernetes.Controller/Management/KubernetesCoreExtensions.cs
index 9cef252c2..862e77d75 100644
--- a/src/Kubernetes.Controller/Management/KubernetesCoreExtensions.cs
+++ b/src/Kubernetes.Controller/Management/KubernetesCoreExtensions.cs
@@ -24,17 +24,14 @@ public static IServiceCollection AddKubernetesCore(this IServiceCollection servi
{
services = services.Configure(options =>
{
- if (options.Configuration is null)
- {
- options.Configuration = KubernetesClientConfiguration.BuildDefaultConfig();
- }
+ options.Configuration ??= KubernetesClientConfiguration.BuildDefaultConfig();
});
services = services.AddSingleton(sp =>
{
var options = sp.GetRequiredService>().Value;
- return new k8s.Kubernetes(options.Configuration);
+ return new Kubernetes(options.Configuration);
});
}
diff --git a/src/Kubernetes.Controller/Protocol/Dispatcher.cs b/src/Kubernetes.Controller/Protocol/Dispatcher.cs
index 7281c81dd..781216165 100644
--- a/src/Kubernetes.Controller/Protocol/Dispatcher.cs
+++ b/src/Kubernetes.Controller/Protocol/Dispatcher.cs
@@ -26,9 +26,7 @@ public Dispatcher(ILogger logger)
public async Task AttachAsync(IDispatchTarget target, CancellationToken cancellationToken)
{
-#pragma warning disable CA1303 // Do not pass literals as localized parameters
_logger.LogDebug("Attaching {DispatchTarget}", target?.ToString());
-#pragma warning restore CA1303 // Do not pass literals as localized parameters
lock (_targetsSync)
{
@@ -43,9 +41,7 @@ public async Task AttachAsync(IDispatchTarget target, CancellationToken cancella
public void Detach(IDispatchTarget target)
{
-#pragma warning disable CA1303 // Do not pass literals as localized parameters
_logger.LogDebug("Detaching {DispatchTarget}", target?.ToString());
-#pragma warning restore CA1303 // Do not pass literals as localized parameters
lock (_targetsSync)
{
diff --git a/src/Kubernetes.Controller/Protocol/Message.cs b/src/Kubernetes.Controller/Protocol/Message.cs
index 44bbb502d..83c1d7a88 100644
--- a/src/Kubernetes.Controller/Protocol/Message.cs
+++ b/src/Kubernetes.Controller/Protocol/Message.cs
@@ -14,18 +14,14 @@ public enum MessageType
Remove,
}
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct Message
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
[JsonConverter(typeof(JsonStringEnumConverter))]
public MessageType MessageType { get; set; }
public string Key { get; set; }
-#pragma warning disable CA2227 // Collection properties should be read only
public List Routes { get; set; }
public List Cluster { get; set; }
-#pragma warning restore CA2227 // Collection properties should be read only
}
diff --git a/src/Kubernetes.Controller/Protocol/Receiver.cs b/src/Kubernetes.Controller/Protocol/Receiver.cs
index 026890110..9daaa8229 100644
--- a/src/Kubernetes.Controller/Protocol/Receiver.cs
+++ b/src/Kubernetes.Controller/Protocol/Receiver.cs
@@ -54,7 +54,6 @@ public override async Task RunAsync(CancellationToken cancellationToken)
{
await _limiter.WaitAsync(cancellationToken).ConfigureAwait(false);
-#pragma warning disable CA1303 // Do not pass literals as localized parameters
Logger.LogInformation("Connecting with {ControllerUrl}", _options.ControllerUrl.ToString());
try
@@ -66,7 +65,11 @@ public override async Task RunAsync(CancellationToken cancellationToken)
using var cancellation = cancellationToken.Register(stream.Close);
while (true)
{
+#if NET6_0
var json = await reader.ReadLineAsync().ConfigureAwait(false);
+#else
+ var json = await reader.ReadLineAsync(cancellationToken).ConfigureAwait(false);
+#endif
if (string.IsNullOrEmpty(json))
{
break;
@@ -84,13 +87,10 @@ public override async Task RunAsync(CancellationToken cancellationToken)
}
}
}
-#pragma warning disable CA1031 // Do not catch general exception types
catch (Exception ex)
-#pragma warning restore CA1031 // Do not catch general exception types
{
Logger.LogInformation(ex, "Stream ended");
}
-#pragma warning restore CA1303 // Do not pass literals as localized parameters
}
}
}
diff --git a/src/Kubernetes.Controller/Queues/WorkQueue.cs b/src/Kubernetes.Controller/Queues/WorkQueue.cs
index 18803d612..4cf33d291 100644
--- a/src/Kubernetes.Controller/Queues/WorkQueue.cs
+++ b/src/Kubernetes.Controller/Queues/WorkQueue.cs
@@ -6,8 +6,6 @@
using System.Threading;
using System.Threading.Tasks;
-#pragma warning disable CA2213 // Disposable fields should be disposed
-
namespace Yarp.Kubernetes.Controller.Queues;
///
@@ -24,7 +22,7 @@ public class WorkQueue : IWorkQueue
private readonly Queue _queue = new Queue();
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(0);
private readonly CancellationTokenSource _shuttingDown = new CancellationTokenSource();
- private bool _disposedValue = false; // To detect redundant calls
+ private bool _disposedValue; // To detect redundant calls
///
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
diff --git a/src/Kubernetes.Controller/Services/IngressController.cs b/src/Kubernetes.Controller/Services/IngressController.cs
index 878a2bd8d..eec45a76c 100644
--- a/src/Kubernetes.Controller/Services/IngressController.cs
+++ b/src/Kubernetes.Controller/Services/IngressController.cs
@@ -30,7 +30,7 @@ public class IngressController : BackgroundHostedService
private readonly IReconciler _reconciler;
private bool _registrationsReady;
- private readonly IWorkQueue _queue;
+ private readonly WorkQueue _queue;
private readonly QueueItem _ingressChangeQueueItem;
public IngressController(
diff --git a/src/Kubernetes.Controller/Services/QueueItem.cs b/src/Kubernetes.Controller/Services/QueueItem.cs
index ea62a2465..bba6a8a4d 100644
--- a/src/Kubernetes.Controller/Services/QueueItem.cs
+++ b/src/Kubernetes.Controller/Services/QueueItem.cs
@@ -32,9 +32,7 @@ public bool Equals(QueueItem other)
public override int GetHashCode()
{
-#pragma warning disable CA1307 // Specify StringComparison
return Change.GetHashCode();
-#pragma warning restore CA1307 // Specify StringComparison
}
public static bool operator ==(QueueItem left, QueueItem right)
diff --git a/src/Kubernetes.Controller/Services/ReconcileData.cs b/src/Kubernetes.Controller/Services/ReconcileData.cs
index 115d06c52..ab2c5188d 100644
--- a/src/Kubernetes.Controller/Services/ReconcileData.cs
+++ b/src/Kubernetes.Controller/Services/ReconcileData.cs
@@ -10,9 +10,7 @@ namespace Yarp.Kubernetes.Controller.Services;
/// ReconcileData is the information returned from
/// and needed by .
///
-#pragma warning disable CA1815 // Override equals and operator equals on value types
public struct ReconcileData
-#pragma warning restore CA1815 // Override equals and operator equals on value types
{
public ReconcileData(IngressData ingress, List services, List endpoints)
{
diff --git a/src/ReverseProxy/Configuration/ConfigProvider/ConfigurationConfigProvider.cs b/src/ReverseProxy/Configuration/ConfigProvider/ConfigurationConfigProvider.cs
index a370a4304..c6035cd96 100644
--- a/src/ReverseProxy/Configuration/ConfigProvider/ConfigurationConfigProvider.cs
+++ b/src/ReverseProxy/Configuration/ConfigProvider/ConfigurationConfigProvider.cs
@@ -112,7 +112,7 @@ private void UpdateSnapshot()
}
}
- private ClusterConfig CreateCluster(IConfigurationSection section)
+ private static ClusterConfig CreateCluster(IConfigurationSection section)
{
var destinations = new Dictionary(StringComparer.OrdinalIgnoreCase);
foreach (var destination in section.GetSection(nameof(ClusterConfig.Destinations)).GetChildren())
@@ -162,15 +162,16 @@ private static RouteConfig CreateRoute(IConfigurationSection section)
};
}
- private static IReadOnlyList>? CreateTransforms(IConfigurationSection section)
+ private static Dictionary[]? CreateTransforms(IConfigurationSection section)
{
if (section.GetChildren() is var children && !children.Any())
{
return null;
}
- return children.Select(subSection =>
- subSection.GetChildren().ToDictionary(d => d.Key, d => d.Value!, StringComparer.OrdinalIgnoreCase)).ToList();
+ return children
+ .Select(subSection => subSection.GetChildren().ToDictionary(d => d.Key, d => d.Value!, StringComparer.OrdinalIgnoreCase))
+ .ToArray();
}
private static RouteMatch CreateRouteMatch(IConfigurationSection section)
@@ -190,14 +191,14 @@ private static RouteMatch CreateRouteMatch(IConfigurationSection section)
};
}
- private static IReadOnlyList? CreateRouteHeaders(IConfigurationSection section)
+ private static RouteHeader[]? CreateRouteHeaders(IConfigurationSection section)
{
if (!section.Exists())
{
return null;
}
- return section.GetChildren().Select(data => CreateRouteHeader(data)).ToArray();
+ return section.GetChildren().Select(CreateRouteHeader).ToArray();
}
private static RouteHeader CreateRouteHeader(IConfigurationSection section)
@@ -211,14 +212,14 @@ private static RouteHeader CreateRouteHeader(IConfigurationSection section)
};
}
- private static IReadOnlyList? CreateRouteQueryParameters(IConfigurationSection section)
+ private static RouteQueryParameter[]? CreateRouteQueryParameters(IConfigurationSection section)
{
if (!section.Exists())
{
return null;
}
- return section.GetChildren().Select(data => CreateRouteQueryParameter(data)).ToArray();
+ return section.GetChildren().Select(CreateRouteQueryParameter).ToArray();
}
private static RouteQueryParameter CreateRouteQueryParameter(IConfigurationSection section)
diff --git a/src/ReverseProxy/Configuration/IYarpOutputCachePolicyProvider.cs b/src/ReverseProxy/Configuration/IYarpOutputCachePolicyProvider.cs
index c6fc031e5..3bde5fbe3 100644
--- a/src/ReverseProxy/Configuration/IYarpOutputCachePolicyProvider.cs
+++ b/src/ReverseProxy/Configuration/IYarpOutputCachePolicyProvider.cs
@@ -21,7 +21,7 @@ internal interface IYarpOutputCachePolicyProvider
ValueTask
internal sealed class HttpForwarder : IHttpForwarder
{
- private static readonly string WebSocketName = "websocket";
+ private const string WebSocketName = "websocket";
private static readonly TimeSpan DefaultTimeout = TimeSpan.FromSeconds(100);
private static readonly Version DefaultVersion = HttpVersion.Version20;
- private static readonly HttpVersionPolicy DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
+ private const HttpVersionPolicy DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
private readonly ILogger _logger;
private readonly TimeProvider _timeProvider;
@@ -886,7 +886,7 @@ private async ValueTask HandleResponseBodyErrorAsync(HttpContext
{
if (requestContent is not null && requestContent.Started)
{
- var alreadyFinished = requestContent.ConsumptionTask.IsCompleted == true;
+ var alreadyFinished = requestContent.ConsumptionTask.IsCompleted;
if (!alreadyFinished)
{
diff --git a/src/ReverseProxy/Forwarder/ProtocolHelper.cs b/src/ReverseProxy/Forwarder/ProtocolHelper.cs
index 8c4c95c04..467b9145b 100644
--- a/src/ReverseProxy/Forwarder/ProtocolHelper.cs
+++ b/src/ReverseProxy/Forwarder/ProtocolHelper.cs
@@ -78,7 +78,9 @@ internal static string CreateSecWebSocketAccept(string? key)
wsServerGuidBytes.CopyTo(bytes.Slice(encodedSecKeyLength));
// Hash the seckey+wsServerGuidBytes bytes
+#pragma warning disable CA5350 // Do Not Use Weak Cryptographic Algorithms -- the spec demands SHA1 in this case.
SHA1.TryHashData(bytes, bytes, out var bytesWritten);
+#pragma warning restore CA5350
Debug.Assert(bytesWritten == 20 /* SHA1 hash length */);
var accept = Convert.ToBase64String(bytes[..bytesWritten]);
diff --git a/src/ReverseProxy/Health/DestinationHealthUpdater.cs b/src/ReverseProxy/Health/DestinationHealthUpdater.cs
index 1c4b22a58..9cc1f0021 100644
--- a/src/ReverseProxy/Health/DestinationHealthUpdater.cs
+++ b/src/ReverseProxy/Health/DestinationHealthUpdater.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Yarp.ReverseProxy.Model;
@@ -67,7 +68,7 @@ internal Task SetPassiveAsync(ClusterState cluster, DestinationState destination
{
healthState.Passive = newHealth;
ScheduleReactivation(cluster, destination, newHealth, reactivationPeriod);
- return Task.Factory.StartNew(c => UpdateDestinations(c!), cluster, TaskCreationOptions.RunContinuationsAsynchronously);
+ return Task.Factory.StartNew(c => UpdateDestinations(c!), cluster, CancellationToken.None, TaskCreationOptions.RunContinuationsAsynchronously, TaskScheduler.Default);
}
return Task.CompletedTask;
}
diff --git a/src/ReverseProxy/Health/TransportFailureRateHealthPolicy.cs b/src/ReverseProxy/Health/TransportFailureRateHealthPolicy.cs
index 14479545b..2d77009d3 100644
--- a/src/ReverseProxy/Health/TransportFailureRateHealthPolicy.cs
+++ b/src/ReverseProxy/Health/TransportFailureRateHealthPolicy.cs
@@ -98,7 +98,7 @@ private static bool DetermineIfDestinationFailed(HttpContext context)
|| error == ForwarderError.UpgradeResponseDestination;
}
- private class ProxiedRequestHistory
+ private sealed class ProxiedRequestHistory
{
private long _nextRecordCreatedAt;
private long _nextRecordTotalCount;
diff --git a/src/ReverseProxy/Management/ProxyConfigManager.cs b/src/ReverseProxy/Management/ProxyConfigManager.cs
index e2940f774..cd663691a 100644
--- a/src/ReverseProxy/Management/ProxyConfigManager.cs
+++ b/src/ReverseProxy/Management/ProxyConfigManager.cs
@@ -147,9 +147,9 @@ private void CreateEndpoints()
///
public override IChangeToken GetChangeToken() => Volatile.Read(ref _endpointsChangeToken);
- private static IReadOnlyList ExtractListOfProxyConfigs(IEnumerable configStates)
+ private static IProxyConfig[] ExtractListOfProxyConfigs(IEnumerable configStates)
{
- return configStates.Select(state => state.LatestConfig).ToList().AsReadOnly();
+ return configStates.Select(state => state.LatestConfig).ToArray();
}
internal async Task InitialLoadAsync()
@@ -895,7 +895,7 @@ public void Dispose()
}
}
- private class ConfigState
+ private sealed class ConfigState
{
public ConfigState(IProxyConfigProvider provider, IProxyConfig config)
{
diff --git a/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs b/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs
index fe98fe37b..eb3ca6a59 100644
--- a/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs
+++ b/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs
@@ -186,7 +186,7 @@ private static bool TryMatchContainsOrNotContains(HeaderMatcher matcher, StringV
return matcher.Mode == HeaderMatchMode.NotContains;
}
- private class HeaderMetadataEndpointComparer : EndpointMetadataComparer
+ private sealed class HeaderMetadataEndpointComparer : EndpointMetadataComparer
{
protected override int CompareMetadata(IHeaderMetadata? x, IHeaderMetadata? y)
{
diff --git a/src/ReverseProxy/Routing/QueryParameterMatcherPolicy.cs b/src/ReverseProxy/Routing/QueryParameterMatcherPolicy.cs
index 9ae034e5e..29cfa216c 100644
--- a/src/ReverseProxy/Routing/QueryParameterMatcherPolicy.cs
+++ b/src/ReverseProxy/Routing/QueryParameterMatcherPolicy.cs
@@ -127,7 +127,7 @@ static bool TryMatch(QueryParameterMatcher matcher, string queryValue, string ex
}
}
- private class QueryParameterMetadataEndpointComparer : EndpointMetadataComparer
+ private sealed class QueryParameterMetadataEndpointComparer : EndpointMetadataComparer
{
protected override int CompareMetadata(IQueryParameterMetadata? x, IQueryParameterMetadata? y)
{
diff --git a/src/ReverseProxy/Routing/ReverseProxyConventionBuilder.cs b/src/ReverseProxy/Routing/ReverseProxyConventionBuilder.cs
index 41003d3b0..10e72b57f 100644
--- a/src/ReverseProxy/Routing/ReverseProxyConventionBuilder.cs
+++ b/src/ReverseProxy/Routing/ReverseProxyConventionBuilder.cs
@@ -94,7 +94,7 @@ void Action(EndpointBuilder endpointBuilder)
return this;
}
- private class EndpointBuilderConventionBuilder : IEndpointConventionBuilder
+ private sealed class EndpointBuilderConventionBuilder : IEndpointConventionBuilder
{
private readonly EndpointBuilder _endpointBuilder;
diff --git a/src/ReverseProxy/ServiceDiscovery/DnsDestinationResolver.cs b/src/ReverseProxy/ServiceDiscovery/DnsDestinationResolver.cs
index 4365d2e04..d4de5c00c 100644
--- a/src/ReverseProxy/ServiceDiscovery/DnsDestinationResolver.cs
+++ b/src/ReverseProxy/ServiceDiscovery/DnsDestinationResolver.cs
@@ -15,7 +15,7 @@ namespace Yarp.ReverseProxy.ServiceDiscovery;
///
/// Implementation of which resolves host names to IP addresses using DNS.
///
-internal class DnsDestinationResolver : IDestinationResolver
+internal sealed class DnsDestinationResolver : IDestinationResolver
{
private readonly IOptionsMonitor _options;
diff --git a/src/ReverseProxy/Transforms/ForwardedTransformFactory.cs b/src/ReverseProxy/Transforms/ForwardedTransformFactory.cs
index e71e0909a..997605d4d 100644
--- a/src/ReverseProxy/Transforms/ForwardedTransformFactory.cs
+++ b/src/ReverseProxy/Transforms/ForwardedTransformFactory.cs
@@ -10,19 +10,19 @@ namespace Yarp.ReverseProxy.Transforms;
internal sealed class ForwardedTransformFactory : ITransformFactory
{
- internal static readonly string XForwardedKey = "X-Forwarded";
- internal static readonly string DefaultXForwardedPrefix = "X-Forwarded-";
- internal static readonly string ForwardedKey = "Forwarded";
- internal static readonly string ActionKey = "Action";
- internal static readonly string HeaderPrefixKey = "HeaderPrefix";
- internal static readonly string ForKey = "For";
- internal static readonly string ByKey = "By";
- internal static readonly string HostKey = "Host";
- internal static readonly string ProtoKey = "Proto";
- internal static readonly string PrefixKey = "Prefix";
- internal static readonly string ForFormatKey = "ForFormat";
- internal static readonly string ByFormatKey = "ByFormat";
- internal static readonly string ClientCertKey = "ClientCert";
+ internal const string XForwardedKey = "X-Forwarded";
+ internal const string DefaultXForwardedPrefix = "X-Forwarded-";
+ internal const string ForwardedKey = "Forwarded";
+ internal const string ActionKey = "Action";
+ internal const string HeaderPrefixKey = "HeaderPrefix";
+ internal const string ForKey = "For";
+ internal const string ByKey = "By";
+ internal const string HostKey = "Host";
+ internal const string ProtoKey = "Proto";
+ internal const string PrefixKey = "Prefix";
+ internal const string ForFormatKey = "ForFormat";
+ internal const string ByFormatKey = "ByFormat";
+ internal const string ClientCertKey = "ClientCert";
private readonly IRandomFactory _randomFactory;
@@ -102,7 +102,7 @@ public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionar
TransformHelpers.TryCheckTooManyParameters(context, transformValues, expected);
// for, host, proto, by
- var tokens = forwardedHeader.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
+ var tokens = forwardedHeader.Split([',', ' '], StringSplitOptions.RemoveEmptyEntries);
foreach (var token in tokens)
{
@@ -115,7 +115,7 @@ public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionar
}
}
}
- else if (transformValues.TryGetValue(ClientCertKey, out var clientCertHeader))
+ else if (transformValues.TryGetValue(ClientCertKey, out _))
{
TransformHelpers.TryCheckTooManyParameters(context, transformValues, expected: 1);
}
@@ -194,7 +194,7 @@ public bool Build(TransformBuilderContext context, IReadOnlyDictionary transformValues)
{
diff --git a/src/ReverseProxy/Transforms/PathTransformFactory.cs b/src/ReverseProxy/Transforms/PathTransformFactory.cs
index cee7f3e07..238b3b097 100644
--- a/src/ReverseProxy/Transforms/PathTransformFactory.cs
+++ b/src/ReverseProxy/Transforms/PathTransformFactory.cs
@@ -11,10 +11,10 @@ namespace Yarp.ReverseProxy.Transforms;
internal sealed class PathTransformFactory : ITransformFactory
{
- internal static readonly string PathSetKey = "PathSet";
- internal static readonly string PathPrefixKey = "PathPrefix";
- internal static readonly string PathRemovePrefixKey = "PathRemovePrefix";
- internal static readonly string PathPatternKey = "PathPattern";
+ internal const string PathSetKey = "PathSet";
+ internal const string PathPrefixKey = "PathPrefix";
+ internal const string PathRemovePrefixKey = "PathRemovePrefix";
+ internal const string PathPatternKey = "PathPattern";
private readonly TemplateBinderFactory _binderFactory;
@@ -54,7 +54,7 @@ public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionar
return true;
}
- private void CheckPathNotNull(TransformRouteValidationContext context, string fieldName, string? path)
+ private static void CheckPathNotNull(TransformRouteValidationContext context, string fieldName, string? path)
{
if (path is null)
{
@@ -103,7 +103,7 @@ private static PathString MakePathString(string path)
{
throw new ArgumentNullException(nameof(path));
}
- if (!path.StartsWith("/", StringComparison.Ordinal))
+ if (!path.StartsWith('/'))
{
path = "/" + path;
}
diff --git a/src/ReverseProxy/Transforms/QueryTransformFactory.cs b/src/ReverseProxy/Transforms/QueryTransformFactory.cs
index 8b18645ad..c2aebfa62 100644
--- a/src/ReverseProxy/Transforms/QueryTransformFactory.cs
+++ b/src/ReverseProxy/Transforms/QueryTransformFactory.cs
@@ -9,11 +9,11 @@ namespace Yarp.ReverseProxy.Transforms;
internal sealed class QueryTransformFactory : ITransformFactory
{
- internal static readonly string QueryValueParameterKey = "QueryValueParameter";
- internal static readonly string QueryRouteParameterKey = "QueryRouteParameter";
- internal static readonly string QueryRemoveParameterKey = "QueryRemoveParameter";
- internal static readonly string AppendKey = "Append";
- internal static readonly string SetKey = "Set";
+ internal const string QueryValueParameterKey = "QueryValueParameter";
+ internal const string QueryRouteParameterKey = "QueryRouteParameter";
+ internal const string QueryRemoveParameterKey = "QueryRemoveParameter";
+ internal const string AppendKey = "Append";
+ internal const string SetKey = "Set";
public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionary transformValues)
{
diff --git a/src/ReverseProxy/Transforms/RequestHeaderForwardedTransform.cs b/src/ReverseProxy/Transforms/RequestHeaderForwardedTransform.cs
index f44c159e5..2d9f365f4 100644
--- a/src/ReverseProxy/Transforms/RequestHeaderForwardedTransform.cs
+++ b/src/ReverseProxy/Transforms/RequestHeaderForwardedTransform.cs
@@ -19,9 +19,9 @@ public class RequestHeaderForwardedTransform : RequestTransform
internal static readonly RequestHeaderForwardedTransform RemoveTransform =
new RequestHeaderForwardedTransform(new NullRandomFactory(), NodeFormat.Random, NodeFormat.Random, false, false, ForwardedTransformActions.Remove);
- private static readonly string ForwardedHeaderName = "Forwarded";
+ private const string ForwardedHeaderName = "Forwarded";
// obfnode = "_" 1*( ALPHA / DIGIT / "." / "_" / "-")
- private static readonly string ObfChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-";
+ private const string ObfChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-";
private readonly IRandomFactory _randomFactory;
diff --git a/src/ReverseProxy/Transforms/RequestHeadersTransformFactory.cs b/src/ReverseProxy/Transforms/RequestHeadersTransformFactory.cs
index 575507fe8..44a35345c 100644
--- a/src/ReverseProxy/Transforms/RequestHeadersTransformFactory.cs
+++ b/src/ReverseProxy/Transforms/RequestHeadersTransformFactory.cs
@@ -9,14 +9,14 @@ namespace Yarp.ReverseProxy.Transforms;
internal sealed class RequestHeadersTransformFactory : ITransformFactory
{
- internal static readonly string RequestHeadersCopyKey = "RequestHeadersCopy";
- internal static readonly string RequestHeaderOriginalHostKey = "RequestHeaderOriginalHost";
- internal static readonly string RequestHeaderKey = "RequestHeader";
- internal static readonly string RequestHeaderRouteValueKey = "RequestHeaderRouteValue";
- internal static readonly string RequestHeaderRemoveKey = "RequestHeaderRemove";
- internal static readonly string RequestHeadersAllowedKey = "RequestHeadersAllowed";
- internal static readonly string AppendKey = "Append";
- internal static readonly string SetKey = "Set";
+ internal const string RequestHeadersCopyKey = "RequestHeadersCopy";
+ internal const string RequestHeaderOriginalHostKey = "RequestHeaderOriginalHost";
+ internal const string RequestHeaderKey = "RequestHeader";
+ internal const string RequestHeaderRouteValueKey = "RequestHeaderRouteValue";
+ internal const string RequestHeaderRemoveKey = "RequestHeaderRemove";
+ internal const string RequestHeadersAllowedKey = "RequestHeadersAllowed";
+ internal const string AppendKey = "Append";
+ internal const string SetKey = "Set";
public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionary transformValues)
{
diff --git a/src/ReverseProxy/Transforms/ResponseTransformFactory.cs b/src/ReverseProxy/Transforms/ResponseTransformFactory.cs
index f111c2038..022de289e 100644
--- a/src/ReverseProxy/Transforms/ResponseTransformFactory.cs
+++ b/src/ReverseProxy/Transforms/ResponseTransformFactory.cs
@@ -9,17 +9,17 @@ namespace Yarp.ReverseProxy.Transforms;
internal sealed class ResponseTransformFactory : ITransformFactory
{
- internal static readonly string ResponseHeadersCopyKey = "ResponseHeadersCopy";
- internal static readonly string ResponseTrailersCopyKey = "ResponseTrailersCopy";
- internal static readonly string ResponseHeaderKey = "ResponseHeader";
- internal static readonly string ResponseTrailerKey = "ResponseTrailer";
- internal static readonly string ResponseHeaderRemoveKey = "ResponseHeaderRemove";
- internal static readonly string ResponseTrailerRemoveKey = "ResponseTrailerRemove";
- internal static readonly string ResponseHeadersAllowedKey = "ResponseHeadersAllowed";
- internal static readonly string ResponseTrailersAllowedKey = "ResponseTrailersAllowed";
- internal static readonly string WhenKey = "When";
- internal static readonly string AppendKey = "Append";
- internal static readonly string SetKey = "Set";
+ internal const string ResponseHeadersCopyKey = "ResponseHeadersCopy";
+ internal const string ResponseTrailersCopyKey = "ResponseTrailersCopy";
+ internal const string ResponseHeaderKey = "ResponseHeader";
+ internal const string ResponseTrailerKey = "ResponseTrailer";
+ internal const string ResponseHeaderRemoveKey = "ResponseHeaderRemove";
+ internal const string ResponseTrailerRemoveKey = "ResponseTrailerRemove";
+ internal const string ResponseHeadersAllowedKey = "ResponseHeadersAllowed";
+ internal const string ResponseTrailersAllowedKey = "ResponseTrailersAllowed";
+ internal const string WhenKey = "When";
+ internal const string AppendKey = "Append";
+ internal const string SetKey = "Set";
public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionary transformValues)
{
diff --git a/src/ReverseProxy/Utilities/NullRandomFactory.cs b/src/ReverseProxy/Utilities/NullRandomFactory.cs
index b2683b5c5..e8ce6b04e 100644
--- a/src/ReverseProxy/Utilities/NullRandomFactory.cs
+++ b/src/ReverseProxy/Utilities/NullRandomFactory.cs
@@ -5,7 +5,7 @@
namespace Yarp.ReverseProxy.Utilities;
-internal class NullRandomFactory : IRandomFactory
+internal sealed class NullRandomFactory : IRandomFactory
{
public Random CreateRandomInstance()
{
diff --git a/src/ReverseProxy/Utilities/Observability.cs b/src/ReverseProxy/Utilities/Observability.cs
index 43034d496..aa4b84f65 100644
--- a/src/ReverseProxy/Utilities/Observability.cs
+++ b/src/ReverseProxy/Utilities/Observability.cs
@@ -37,7 +37,7 @@ public static void AddError(this Activity activity, string message, string descr
}
}
- private class YarpActivity
+ private sealed class YarpActivity
{
}
}
diff --git a/test/ReverseProxy.Tests/Common/TaskExtensions.cs b/test/ReverseProxy.Tests/Common/TaskExtensions.cs
index 8ff937e0b..c01384b11 100644
--- a/test/ReverseProxy.Tests/Common/TaskExtensions.cs
+++ b/test/ReverseProxy.Tests/Common/TaskExtensions.cs
@@ -88,108 +88,4 @@ private static string CreateMessage(TimeSpan timeout, string filePath, int lineN
=> string.IsNullOrEmpty(filePath)
? $"The operation timed out after reaching the limit of {timeout.TotalMilliseconds}ms."
: $"The operation at {filePath}:{lineNumber} timed out after reaching the limit of {timeout.TotalMilliseconds}ms.";
-
- ///
- /// Runs an action on the current scheduler instead of the default scheduler.
- ///
- /// Scheduler for the action to be scheduled on.
- /// Action to be scheduled.
- /// Cancelation token to link the new task to. If canceled before being scheduled, the action will not be run.
- /// New task created for the action.
- public static Task Run(this TaskScheduler scheduler, Action action, CancellationToken cancelationToken = default)
- {
- var taskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskContinuationOptions.None, scheduler);
- return taskFactory.StartNew(action, cancellationToken: cancelationToken);
- }
-
- ///
- /// Runs a function on the current scheduler instead of the default scheduler.
- ///
- /// Result type.
- /// Scheduler for the action to be scheduled on.
- /// Function to be scheduled.
- /// Cancelation token to link the new task to. If canceled before being scheduled, the action will not be run.
- /// New task created for the function. This task completes with the result of calling the function.
- public static Task Run(this TaskScheduler scheduler, Func function, CancellationToken cancelationToken = default)
- {
- var taskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskContinuationOptions.None, scheduler);
- return taskFactory.StartNew(function, cancellationToken: cancelationToken);
- }
-
- ///
- /// Runs a function on the current scheduler instead of the default scheduler.
- ///
- /// Scheduler for the action to be scheduled on.
- /// Function to be scheduled.
- /// Cancelation token to link the new task to. If canceled before being scheduled, the action will not be run.
- /// New task created for the function. This task completes with the result of the task returned by the function.
- public static async Task Run(this TaskScheduler scheduler, Func function, CancellationToken cancelationToken = default)
- {
- var taskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskContinuationOptions.None, scheduler);
- var innerTask = await taskFactory.StartNew(function, cancellationToken: cancelationToken);
- await innerTask;
- }
-
- ///
- /// Runs a function on the current scheduler instead of the default scheduler.
- ///
- /// Result type.
- /// Scheduler for the action to be scheduled on.
- /// Function to be scheduled.
- /// Cancelation token to link the new task to. If canceled before being scheduled, the action will not be run.
- /// New task created for the function. This task completes with the result of the task returned by the function.
- public static async Task Run(this TaskScheduler scheduler, Func> function, CancellationToken cancelationToken = default)
- {
- var taskFactory = new TaskFactory(CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskContinuationOptions.None, scheduler);
- var innerTask = await taskFactory.StartNew(function, cancellationToken: cancelationToken);
- return await innerTask;
- }
-
- ///
- /// Returns a , which runs the continuation on the specified scheduler.
- ///
- /// Scheduler to resume execution on.
- public static SwitchSchedulerAwaiter SwitchTo(this TaskScheduler scheduler)
- {
- return new SwitchSchedulerAwaiter(scheduler);
- }
-
- ///
- /// Custom awaiter that resumes the continuation on the specified scheduler.
- ///
- public struct SwitchSchedulerAwaiter : INotifyCompletion
- {
- private readonly TaskScheduler _scheduler;
-
- ///
- /// Initializes a new instance of the struct.
- ///
- public SwitchSchedulerAwaiter(TaskScheduler scheduler)
- {
- _scheduler = scheduler;
- }
-
- ///
- /// Whether the switch is completed.
- ///
- public bool IsCompleted => _scheduler == TaskScheduler.Current;
-
- ///
- /// Part of custom awaiter pattern.
- ///
- public void GetResult()
- {
- }
-
- ///
- /// Part of custom awaiter pattern.
- ///
- public SwitchSchedulerAwaiter GetAwaiter() => this;
-
- ///
- public void OnCompleted(Action continuation)
- {
- _scheduler.Run(continuation);
- }
- }
}
diff --git a/test/Tests.Common/TestAutoMockBase.cs b/test/Tests.Common/TestAutoMockBase.cs
index 8f8a95510..1a314da21 100644
--- a/test/Tests.Common/TestAutoMockBase.cs
+++ b/test/Tests.Common/TestAutoMockBase.cs
@@ -13,7 +13,7 @@ namespace Yarp.Tests.Common;
///
public class TestAutoMockBase : IDisposable
{
- private bool _isDisposed = false;
+ private bool _isDisposed;
///
/// Initializes a new instance of the class.
diff --git a/test/Tests.Common/TestTimeProvider.cs b/test/Tests.Common/TestTimeProvider.cs
index ac1feeab9..e47eb57fa 100644
--- a/test/Tests.Common/TestTimeProvider.cs
+++ b/test/Tests.Common/TestTimeProvider.cs
@@ -107,7 +107,7 @@ public void AssertTimerDisposed(int idx)
Assert.True(_timers[idx].IsDisposed);
}
- private class TestTimer : ITimer
+ private sealed class TestTimer : ITimer
{
public TestTimer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period)
{
diff --git a/test/Tests.Common/XunitLoggerProvider.cs b/test/Tests.Common/XunitLoggerProvider.cs
index a86f9c5f1..05a447058 100644
--- a/test/Tests.Common/XunitLoggerProvider.cs
+++ b/test/Tests.Common/XunitLoggerProvider.cs
@@ -13,7 +13,7 @@ namespace Microsoft.Extensions.Logging.Testing;
public class XunitLoggerProvider : ILoggerProvider
{
// Used to distinguish when multiple apps are running as part of the same test.
- private static int InstanceCount = 0;
+ private static int InstanceCount;
private readonly int _providerInstanceId = Interlocked.Increment(ref InstanceCount);
private readonly ITestOutputHelper _output;
private readonly LogLevel _minLevel;
diff --git a/testassets/Directory.Build.props b/testassets/Directory.Build.props
index a6373de17..2955a2017 100644
--- a/testassets/Directory.Build.props
+++ b/testassets/Directory.Build.props
@@ -4,6 +4,7 @@
+ truefalse
diff --git a/testassets/ReverseProxy.Code/MyTransformFactory.cs b/testassets/ReverseProxy.Code/MyTransformFactory.cs
index c8fd86429..e318d5fcf 100644
--- a/testassets/ReverseProxy.Code/MyTransformFactory.cs
+++ b/testassets/ReverseProxy.Code/MyTransformFactory.cs
@@ -9,7 +9,7 @@
namespace Yarp.ReverseProxy.Sample;
-internal class MyTransformFactory : ITransformFactory
+internal sealed class MyTransformFactory : ITransformFactory
{
public bool Validate(TransformRouteValidationContext context, IReadOnlyDictionary transformValues)
{
diff --git a/testassets/ReverseProxy.Code/MyTransformProvider.cs b/testassets/ReverseProxy.Code/MyTransformProvider.cs
index 44c4822a6..bc9c947bf 100644
--- a/testassets/ReverseProxy.Code/MyTransformProvider.cs
+++ b/testassets/ReverseProxy.Code/MyTransformProvider.cs
@@ -8,7 +8,7 @@
namespace Yarp.ReverseProxy.Sample;
-internal class MyTransformProvider : ITransformProvider
+internal sealed class MyTransformProvider : ITransformProvider
{
public void ValidateRoute(TransformRouteValidationContext context)
{
diff --git a/testassets/ReverseProxy.Code/TokenService.cs b/testassets/ReverseProxy.Code/TokenService.cs
index 4daf26c4a..a825d7341 100644
--- a/testassets/ReverseProxy.Code/TokenService.cs
+++ b/testassets/ReverseProxy.Code/TokenService.cs
@@ -6,7 +6,7 @@
namespace Yarp.ReverseProxy.Sample;
-internal class TokenService
+internal sealed class TokenService
{
internal Task GetAuthTokenAsync(ClaimsPrincipal user)
{
diff --git a/testassets/ReverseProxy.Config/CustomConfigFilter.cs b/testassets/ReverseProxy.Config/CustomConfigFilter.cs
index f7b25329a..eedc7e39d 100644
--- a/testassets/ReverseProxy.Config/CustomConfigFilter.cs
+++ b/testassets/ReverseProxy.Config/CustomConfigFilter.cs
@@ -10,7 +10,7 @@
namespace Yarp.ReverseProxy.Sample;
-public class CustomConfigFilter : IProxyConfigFilter
+public sealed class CustomConfigFilter : IProxyConfigFilter
{
public ValueTask ConfigureClusterAsync(ClusterConfig cluster, CancellationToken cancel)
{
diff --git a/testassets/ReverseProxy.Direct/Program.cs b/testassets/ReverseProxy.Direct/Program.cs
index a8c0a0a4c..9f56b91d1 100644
--- a/testassets/ReverseProxy.Direct/Program.cs
+++ b/testassets/ReverseProxy.Direct/Program.cs
@@ -64,7 +64,7 @@
app.Run();
-internal class CustomTransformer : HttpTransformer
+internal sealed class CustomTransformer : HttpTransformer
{
public override async ValueTask TransformRequestAsync(HttpContext httpContext, HttpRequestMessage proxyRequest, string destinationPrefix, CancellationToken cancellationToken)
{
diff --git a/testassets/ReverseProxy.Direct/TlsFilter.cs b/testassets/ReverseProxy.Direct/TlsFilter.cs
index ac1cb41b2..2a3e85f69 100644
--- a/testassets/ReverseProxy.Direct/TlsFilter.cs
+++ b/testassets/ReverseProxy.Direct/TlsFilter.cs
@@ -10,7 +10,7 @@
namespace Yarp.ReverseProxy.Sample;
-public class TlsFilter
+public static class TlsFilter
{
// This sniffs the TLS handshake and rejects requests that meat specific criteria.
internal static async Task ProcessAsync(ConnectionContext connectionContext, Func next, ILogger logger)
diff --git a/testassets/TestClient/CommandLineArgs.cs b/testassets/TestClient/CommandLineArgs.cs
index 5145bb463..afba334dc 100644
--- a/testassets/TestClient/CommandLineArgs.cs
+++ b/testassets/TestClient/CommandLineArgs.cs
@@ -5,7 +5,7 @@
namespace SampleClient;
-internal class CommandLineArgs
+internal sealed class CommandLineArgs
{
private CommandLineArgs()
{
diff --git a/testassets/TestClient/Scenarios/Http1Scenario.cs b/testassets/TestClient/Scenarios/Http1Scenario.cs
index e699476cd..4dc7496f9 100644
--- a/testassets/TestClient/Scenarios/Http1Scenario.cs
+++ b/testassets/TestClient/Scenarios/Http1Scenario.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation.
+// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
@@ -11,7 +11,7 @@
namespace SampleClient.Scenarios;
-internal class Http1Scenario : IScenario
+internal sealed class Http1Scenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
diff --git a/testassets/TestClient/Scenarios/Http2PostExpectContinueScenario.cs b/testassets/TestClient/Scenarios/Http2PostExpectContinueScenario.cs
index 9dc944bb3..bae66953c 100644
--- a/testassets/TestClient/Scenarios/Http2PostExpectContinueScenario.cs
+++ b/testassets/TestClient/Scenarios/Http2PostExpectContinueScenario.cs
@@ -16,7 +16,7 @@ namespace SampleClient.Scenarios;
/// This scenario can be encountered in real world scenarios, usually when authentication fails on the destination.
/// The Expect: 100-continue behavior causes the request body copy to not even start on YARP in this case.
///
-internal class Http2PostExpectContinueScenario : IScenario
+internal sealed class Http2PostExpectContinueScenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
diff --git a/testassets/TestClient/Scenarios/Http2Scenario.cs b/testassets/TestClient/Scenarios/Http2Scenario.cs
index 9f05242f3..043d542cd 100644
--- a/testassets/TestClient/Scenarios/Http2Scenario.cs
+++ b/testassets/TestClient/Scenarios/Http2Scenario.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation.
+// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
@@ -11,7 +11,7 @@
namespace SampleClient.Scenarios;
-internal class Http2Scenario : IScenario
+internal sealed class Http2Scenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
diff --git a/testassets/TestClient/Scenarios/RawUpgradeScenario.cs b/testassets/TestClient/Scenarios/RawUpgradeScenario.cs
index a1897159b..ba02fd97f 100644
--- a/testassets/TestClient/Scenarios/RawUpgradeScenario.cs
+++ b/testassets/TestClient/Scenarios/RawUpgradeScenario.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation.
+// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
@@ -10,7 +10,7 @@
namespace SampleClient.Scenarios;
-internal class RawUpgradeScenario : IScenario
+internal sealed class RawUpgradeScenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
@@ -43,7 +43,7 @@ public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellat
for (var i = 0; i <= 255; i++)
{
buffer[0] = (byte)i;
- await rawStream.WriteAsync(buffer, 0, 1, cancellation);
+ await rawStream.WriteAsync(buffer, cancellation);
var read = await rawStream.ReadAsync(buffer, cancellation);
if (i == 255)
{
diff --git a/testassets/TestClient/Scenarios/SessionAffinityScenario.cs b/testassets/TestClient/Scenarios/SessionAffinityScenario.cs
index 8f1e21ab3..57c95431e 100644
--- a/testassets/TestClient/Scenarios/SessionAffinityScenario.cs
+++ b/testassets/TestClient/Scenarios/SessionAffinityScenario.cs
@@ -12,7 +12,7 @@
namespace SampleClient.Scenarios;
-internal class SessionAffinityScenario : IScenario
+internal sealed class SessionAffinityScenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
diff --git a/testassets/TestClient/Scenarios/WebSocketsScenario.cs b/testassets/TestClient/Scenarios/WebSocketsScenario.cs
index e4ce63499..391011d6c 100644
--- a/testassets/TestClient/Scenarios/WebSocketsScenario.cs
+++ b/testassets/TestClient/Scenarios/WebSocketsScenario.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation.
+// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
@@ -10,7 +10,7 @@
namespace SampleClient.Scenarios;
-internal class WebSocketsScenario : IScenario
+internal sealed class WebSocketsScenario : IScenario
{
public async Task ExecuteAsync(CommandLineArgs args, CancellationToken cancellation)
{
diff --git a/testassets/TestServer/Controllers/UpgradeController.cs b/testassets/TestServer/Controllers/UpgradeController.cs
index 5f99c1cbf..b9fca5544 100644
--- a/testassets/TestServer/Controllers/UpgradeController.cs
+++ b/testassets/TestServer/Controllers/UpgradeController.cs
@@ -1,4 +1,4 @@
-// Copyright (c) Microsoft Corporation.
+// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System.IO;
@@ -54,8 +54,7 @@ public async Task RawUpgrade()
private async Task RunPingPongAsync(Stream stream)
{
var buffer = new byte[1];
- int read;
- while ((read = await stream.ReadAsync(buffer, HttpContext.RequestAborted)) != 0)
+ while (await stream.ReadAsync(buffer, HttpContext.RequestAborted) != 0)
{
if (buffer[0] == 255)
{
@@ -63,7 +62,7 @@ private async Task RunPingPongAsync(Stream stream)
break;
}
- await stream.WriteAsync(buffer, 0, read);
+ await stream.WriteAsync(buffer);
}
}
}