diff --git a/eng/Analyzers.props b/eng/Analyzers.props
index 438ae20b4fe..760c10297da 100644
--- a/eng/Analyzers.props
+++ b/eng/Analyzers.props
@@ -1,9 +1,10 @@
- $(MSBuildThisFileDirectory)CodeAnalysis.ruleset
- true
+ true
-
-
+
+
+
+
diff --git a/eng/CodeAnalysis.Repository.ruleset b/eng/CodeAnalysis.Repository.ruleset
deleted file mode 100644
index 0d127e147e1..00000000000
--- a/eng/CodeAnalysis.Repository.ruleset
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/eng/CodeAnalysis.Security.ruleset b/eng/CodeAnalysis.Security.ruleset
deleted file mode 100644
index 792c1a3a72e..00000000000
--- a/eng/CodeAnalysis.Security.ruleset
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/eng/CodeAnalysis.globalconfig b/eng/CodeAnalysis.globalconfig
new file mode 100644
index 00000000000..13c3a3306ae
--- /dev/null
+++ b/eng/CodeAnalysis.globalconfig
@@ -0,0 +1,1610 @@
+is_global = true
+
+# AD0001: Analyzer threw an exception
+dotnet_diagnostic.AD0001.severity = suggestion
+
+# 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
+
+# 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
+
+# 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
+
+# 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 = none
+
+# 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
+
+# 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
+# TODO: Change to warning
+dotnet_diagnostic.CA2007.severity = none
+
+# 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
+
+# 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
+
+# CA2109: Review visible event handlers
+dotnet_diagnostic.CA2109.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
+
+# CA2229: Implement serialization constructors
+dotnet_diagnostic.CA2229.severity = warning
+
+# 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
+
+# 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
+
+# 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 = 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 = 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 = silent
+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 = silent
+
+# IDE0211: Use program main
+dotnet_diagnostic.IDE0211.severity = silent
+
+# IDE0220: foreach cast
+dotnet_diagnostic.IDE0220.severity = silent
+
+# IDE0230: Use UTF8 string literal
+dotnet_diagnostic.IDE0230.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
\ No newline at end of file
diff --git a/eng/CodeAnalysis.ruleset b/eng/CodeAnalysis.ruleset
deleted file mode 100644
index 6e46bfdde84..00000000000
--- a/eng/CodeAnalysis.ruleset
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 83cb0ab9298..8735b9f5fae 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -18,10 +18,18 @@
https://github.com/dotnet/aspnetcored50065c4a4fe31a66a1cc2e1a31896d30464da13
+
+ https://github.com/dotnet/roslyn-analyzers
+ 19f02959e8a039ed4e27cce1feff462b37bf0df6
+ https://github.com/dotnet/arcade02e28316bf35d1028683ee313f0794776bff18d1
+
+ https://github.com/dotnet/arcade
+ 02e28316bf35d1028683ee313f0794776bff18d1
+ https://github.com/dotnet/arcade02e28316bf35d1028683ee313f0794776bff18d1
diff --git a/eng/Versions.props b/eng/Versions.props
index 2ffae056fe1..76e59990f82 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -46,12 +46,15 @@
-->
+ 7.0.0-beta.22513.47.0.0-beta.22513.47.0.07.0.0-rtm.22513.72.0.0-beta4.22504.1
+
+ 7.0.0-preview1.22524.27.0.07.0.0-rtm.22512.2
diff --git a/src/Microsoft.Diagnostics.Monitoring.Options/DiagnosticPortOptionsDefaults.cs b/src/Microsoft.Diagnostics.Monitoring.Options/DiagnosticPortOptionsDefaults.cs
index d4d42b10bb5..8115879f35c 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Options/DiagnosticPortOptionsDefaults.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.Options/DiagnosticPortOptionsDefaults.cs
@@ -4,7 +4,7 @@
namespace Microsoft.Diagnostics.Monitoring.WebApi
{
- internal class DiagnosticPortOptionsDefaults
+ internal static class DiagnosticPortOptionsDefaults
{
public const DiagnosticPortConnectionMode ConnectionMode = DiagnosticPortConnectionMode.Connect;
public const bool DeleteEndpointOnStartup = false;
diff --git a/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptionsDefaults.cs b/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptionsDefaults.cs
index bcb35600d3e..4496a590944 100644
--- a/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptionsDefaults.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.Options/MetricsOptionsDefaults.cs
@@ -4,7 +4,7 @@
namespace Microsoft.Diagnostics.Monitoring.WebApi
{
- internal class MetricsOptionsDefaults
+ internal static class MetricsOptionsDefaults
{
public const bool Enabled = true;
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/CommandLineHelper.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/CommandLineHelper.cs
index 5b71196f390..0e6c7f93235 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/CommandLineHelper.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/CommandLineHelper.cs
@@ -6,7 +6,7 @@
namespace Microsoft.Diagnostics.Monitoring.WebApi
{
- internal class CommandLineHelper
+ internal static class CommandLineHelper
{
public static string ExtractExecutablePath(string commandLine, bool isWindows)
{
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs
index 2d95fed3bda..313faa8e0f7 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs
@@ -710,15 +710,15 @@ private Task StartLogs(
{
return LogFormat.JsonSequence;
}
- if (acceptedHeaders.Any(h => TextPlainHeader.IsSubsetOf(h)))
+ if (acceptedHeaders.Any(TextPlainHeader.IsSubsetOf))
{
return LogFormat.PlainText;
}
- if (acceptedHeaders.Any(h => NdJsonHeader.IsSubsetOf(h)))
+ if (acceptedHeaders.Any(NdJsonHeader.IsSubsetOf))
{
return LogFormat.NewlineDelimitedJson;
}
- if (acceptedHeaders.Any(h => JsonSequenceHeader.IsSubsetOf(h)))
+ if (acceptedHeaders.Any(JsonSequenceHeader.IsSubsetOf))
{
return LogFormat.JsonSequence;
}
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/DiagnosticServices.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/DiagnosticServices.cs
index 6d167ce27e3..9468a4ae372 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/DiagnosticServices.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/DiagnosticServices.cs
@@ -66,7 +66,7 @@ public async Task> GetProcessesAsync(DiagProcessFilter
public Task GetProcessAsync(ProcessKey? processKey, CancellationToken token)
{
- DiagProcessFilter filterOptions = null;
+ DiagProcessFilter filterOptions;
if (processKey.HasValue)
{
filterOptions = DiagProcessFilter.FromProcessKey(processKey.Value);
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/KeyValueLogScope.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/KeyValueLogScope.cs
index 1191d0f90cd..75aaaed00c0 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/KeyValueLogScope.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/KeyValueLogScope.cs
@@ -41,10 +41,10 @@ public override string ToString()
{
if (builder.Length > 0)
{
- builder.Append(" ");
+ builder.Append(' ');
}
builder.Append(kvp.Key);
- builder.Append(":");
+ builder.Append(':');
builder.Append(kvp.Value);
}
return builder.ToString();
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/OperationTrackerService.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/OperationTrackerService.cs
index 714dadb292d..4e88ff19a40 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/OperationTrackerService.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/OperationTrackerService.cs
@@ -14,7 +14,7 @@ internal sealed class OperationTrackerService
private sealed class OperationsTracker : IDisposable
{
- private int _count = 0;
+ private int _count;
public IDisposable Register()
{
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/ProcessInfoImpl.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/ProcessInfoImpl.cs
index 6eaa99eabb2..60d2f4186a3 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/ProcessInfoImpl.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/ProcessInfoImpl.cs
@@ -22,7 +22,7 @@ internal sealed class ProcessInfoImpl : IProcessInfo
// String returned for a process field when its value could not be retrieved. This is the same
// value that is returned by the runtime when it could not determine the value for each of those fields.
- private static readonly string ProcessFieldUnknownValue = "unknown";
+ private const string ProcessFieldUnknownValue = "unknown";
// The value of the operating system field of the ProcessInfo result when the target process is running
// on a Windows operating system.
@@ -43,12 +43,6 @@ public ProcessInfoImpl(
ProcessName = processName ?? ProcessFieldUnknownValue;
}
- public static async Task FromEndpointInfoAsync(IEndpointInfo endpointInfo)
- {
- using CancellationTokenSource extendedInfoCancellation = new(ExtendedProcessInfoTimeout);
- return await FromEndpointInfoAsync(endpointInfo, extendedInfoCancellation.Token);
- }
-
// Creates an IProcessInfo object from the IEndpointInfo. Attempts to get the command line using event pipe
// if the endpoint information doesn't provide it. The cancelation token can be used to timebox this fallback
// mechanism.
@@ -102,7 +96,7 @@ public static async Task FromEndpointInfoAsync(IEndpointInfo endpo
{
if (null != pipeline)
{
- _ = Task.Run(() => pipeline.DisposeAsync());
+ _ = Task.Run(pipeline.DisposeAsync);
}
}
}
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs
index 97a17368417..9906c26d8a6 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/RequestThrottling/RequestLimitTracker.cs
@@ -1,4 +1,8 @@
-using Microsoft.Extensions.Logging;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.Extensions.Logging;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -10,7 +14,7 @@ internal sealed class RequestLimitTracker
{
private sealed class RequestCount : IDisposable
{
- private int _count = 0;
+ private int _count;
public int Increment() => Interlocked.Increment(ref _count);
public void Decrement() => Interlocked.Decrement(ref _count);
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/StacksFormatter.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/StacksFormatter.cs
index 58293b3f9e6..f3584b7c66e 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/StacksFormatter.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/StacksFormatter.cs
@@ -34,7 +34,7 @@ public StacksFormatter(Stream outputStream)
public abstract Task FormatStack(CallStackResult stackResult, CancellationToken token);
- protected string GetModuleName(NameCache cache, ulong moduleId)
+ protected static string GetModuleName(NameCache cache, ulong moduleId)
{
string moduleName = UnknownModule;
if (cache.ModuleData.TryGetValue(moduleId, out ModuleData moduleData))
@@ -90,7 +90,7 @@ private void BuildClassName(StringBuilder builder, NameCache cache, ulong classI
}
}
- private void BuildClassName(StringBuilder builder, NameCache cache, ulong moduleId, uint token)
+ private static void BuildClassName(StringBuilder builder, NameCache cache, ulong moduleId, uint token)
{
var classNames = new Stack();
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/TextStacksFormatter.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/TextStacksFormatter.cs
index b5bcb144cea..21be8b36fbf 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/TextStacksFormatter.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Stacks/TextStacksFormatter.cs
@@ -48,7 +48,7 @@ private void BuildFrame(StringBuilder builder, NameCache cache, CallStackFrame f
}
else if (cache.FunctionData.TryGetValue(frame.FunctionId, out FunctionData functionData))
{
- builder.Append(base.GetModuleName(cache, functionData.ModuleId));
+ builder.Append(GetModuleName(cache, functionData.ModuleId));
builder.Append(ModuleSeparator);
BuildClassName(builder, cache, functionData);
builder.Append(ClassSeparator);
diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Validation/IntegerOrHexStringAttribute.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Validation/IntegerOrHexStringAttribute.cs
index 9c8413572a6..79cf8d9e374 100644
--- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Validation/IntegerOrHexStringAttribute.cs
+++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Validation/IntegerOrHexStringAttribute.cs
@@ -37,7 +37,7 @@ public static bool TryParse(string value, out long result, out string error)
{
// AllowHexSpecifier requires that the "0x" is removed before attempting to parse.
// It parses the actual value, not the "0x" syntax prefix.
- if (!long.TryParse(value.Substring(2), NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out result))
+ if (!long.TryParse(value.AsSpan(2), NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, out result))
{
error = string.Format(CultureInfo.InvariantCulture, Strings.ErrorMessage_ValueNotHex, value);
return false;
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema.UnitTests/SchemaGenerationTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema.UnitTests/SchemaGenerationTests.cs
index f49a79e5ed2..05bacc699dc 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema.UnitTests/SchemaGenerationTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema.UnitTests/SchemaGenerationTests.cs
@@ -116,10 +116,10 @@ private static void PrintSection(ITestOutputHelper outputHelper, string header,
}
}
- private async Task> ReadAllLines(TextReader reader)
+ private static async Task> ReadAllLines(TextReader reader)
{
var lines = new List();
- string line = null;
+ string line;
while ((line = await reader.ReadLineAsync()) != null)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/ExperimentalSchemaProcessor.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/ExperimentalSchemaProcessor.cs
index 8bb28b61912..b42fd540439 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/ExperimentalSchemaProcessor.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/ExperimentalSchemaProcessor.cs
@@ -8,7 +8,7 @@
namespace Microsoft.Diagnostics.Monitoring.ConfigurationSchema
{
- internal class ExperimentalSchemaProcessor : ISchemaProcessor
+ internal sealed class ExperimentalSchemaProcessor : ISchemaProcessor
{
private const string ExperimentalPrefix = "[Experimental]";
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/Program.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/Program.cs
index 51f21dd5b2c..c6074116cef 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/Program.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/Program.cs
@@ -7,7 +7,7 @@
namespace Microsoft.Diagnostics.Monitoring.ConfigurationSchema
{
- class Program
+ internal static class Program
{
static void Main(string[] args)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/SchemaGenerator.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/SchemaGenerator.cs
index d8408340829..ce2c53f27d5 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/SchemaGenerator.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.ConfigurationSchema/SchemaGenerator.cs
@@ -264,7 +264,7 @@ private static JsonSchemaProperty AddDiscriminatedSubSchema(
return discriminatedProperty;
}
- private class GenerationContext
+ private sealed class GenerationContext
{
private readonly JsonSchemaGenerator _generator;
private readonly JsonSchemaResolver _resolver;
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/ResponseNames.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/ResponseNames.cs
index 3ca18669d4c..9cbf68890af 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/ResponseNames.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/ResponseNames.cs
@@ -4,10 +4,10 @@
namespace Microsoft.Diagnostics.Monitoring.OpenApiGen
{
- internal class ResponseNames
+ internal static class ResponseNames
{
- public static readonly string BadRequestResponse = nameof(BadRequestResponse);
- public static readonly string UnauthorizedResponse = nameof(UnauthorizedResponse);
- public static readonly string TooManyRequestsResponse = nameof(TooManyRequestsResponse);
+ public const string BadRequestResponse = nameof(BadRequestResponse);
+ public const string UnauthorizedResponse = nameof(UnauthorizedResponse);
+ public const string TooManyRequestsResponse = nameof(TooManyRequestsResponse);
}
}
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/StatusCodeStrings.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/StatusCodeStrings.cs
index 716d5de3247..b7acef4094e 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/StatusCodeStrings.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.OpenApiGen/StatusCodeStrings.cs
@@ -7,7 +7,7 @@
namespace Microsoft.Diagnostics.Monitoring.OpenApiGen
{
- internal class StatusCodeStrings
+ internal static class StatusCodeStrings
{
public static readonly string Status400BadRequest = StatusCodes.Status400BadRequest.ToString(CultureInfo.InvariantCulture);
public static readonly string Status401Unauthorized = StatusCodes.Status401Unauthorized.ToString(CultureInfo.InvariantCulture);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Program.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Program.cs
index 3131a90a4df..0af2d562875 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Program.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Program.cs
@@ -9,7 +9,7 @@
namespace Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp
{
- internal class Program
+ internal static class Program
{
public static Task Main(string[] args)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCatchScenario.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCatchScenario.cs
index efbc2f37dfd..cfeafa40279 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCatchScenario.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCatchScenario.cs
@@ -10,7 +10,7 @@ namespace Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp.Scenarios
///
/// Async waits until it receives the Continue command.
///
- internal class ExceptionThrowCatchScenario
+ internal static class ExceptionThrowCatchScenario
{
public static Command Command()
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCrashScenario.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCrashScenario.cs
index d81a52c4d63..e3ff735fc9c 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCrashScenario.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp/Scenarios/ExceptionThrowCrashScenario.cs
@@ -10,7 +10,7 @@ namespace Microsoft.Diagnostics.Monitoring.Profiler.UnitTestApp.Scenarios
///
/// Async waits until it receives the Continue command.
///
- internal class ExceptionThrowCrashScenario
+ internal static class ExceptionThrowCrashScenario
{
public static Command Command()
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/DumpTestUtilities.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/DumpTestUtilities.cs
index fea8b2e3430..7d6366cd78a 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/DumpTestUtilities.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/DumpTestUtilities.cs
@@ -84,13 +84,13 @@ public static async Task ValidateDump(bool expectElfDump, Stream dumpStream)
public class MinidumpHeader : TStruct
{
- public uint Signature = 0;
- public uint Version = 0;
- public uint NumberOfStreams = 0;
- public uint StreamDirectoryRva = 0;
- public uint CheckSum = 0;
- public uint TimeDateStamp = 0;
- public ulong Flags = 0;
+ public uint Signature;
+ public uint Version;
+ public uint NumberOfStreams;
+ public uint StreamDirectoryRva;
+ public uint CheckSum;
+ public uint TimeDateStamp;
+ public ulong Flags;
// 50,4D,44,4D = PMDM
public ValidationRule IsSignatureValid => new ValidationRule("Invalid Signature", () => Signature == 0x504D444DU);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Fixtures/AzuriteFixture.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Fixtures/AzuriteFixture.cs
index a37e43ca6e6..ebc001e5195 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Fixtures/AzuriteFixture.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Fixtures/AzuriteFixture.cs
@@ -115,7 +115,7 @@ public AzuriteFixture()
}
}
- private ProcessStartInfo ConstructAzuriteProcessStartInfo(AzuriteAccount authorizedAccount, string workspaceDirectory)
+ private static ProcessStartInfo ConstructAzuriteProcessStartInfo(AzuriteAccount authorizedAccount, string workspaceDirectory)
{
bool isVSCopy = false;
string azuriteFolder = null;
@@ -225,7 +225,7 @@ private void ParseAzuriteStartupError(object sender, DataReceivedEventArgs e)
_azuriteStartupStderr.AppendLine(e.Data);
}
- private int ParseAzuritePort(string outputLine)
+ private static int ParseAzuritePort(string outputLine)
{
int portDelimiterIndex = outputLine.LastIndexOf(':') + 1;
if (portDelimiterIndex == 0 || portDelimiterIndex >= outputLine.Length)
@@ -236,7 +236,7 @@ private int ParseAzuritePort(string outputLine)
return int.Parse(outputLine[portDelimiterIndex..]);
}
- private string ErrorMessage(string specificReason)
+ private static string ErrorMessage(string specificReason)
{
return $"Could not run Azurite based test: {specificReason}.\n" +
"Make sure that:\n" +
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LiveMetricsTestUtilities.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LiveMetricsTestUtilities.cs
index feac173258b..9e7e2b0cca6 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LiveMetricsTestUtilities.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LiveMetricsTestUtilities.cs
@@ -11,7 +11,7 @@
namespace Microsoft.Diagnostics.Monitoring.TestCommon
{
- internal class LiveMetricsTestUtilities
+ internal static class LiveMetricsTestUtilities
{
internal static async Task ValidateMetrics(IEnumerable expectedProviders, IEnumerable expectedNames,
IAsyncEnumerable actualMetrics, bool strict)
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LogsTestUtilities.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LogsTestUtilities.cs
index a8db8716d61..3b79ab510bc 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LogsTestUtilities.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/LogsTestUtilities.cs
@@ -16,7 +16,7 @@
namespace Microsoft.Diagnostics.Monitoring.TestCommon
{
- internal class LogsTestUtilities
+ internal static class LogsTestUtilities
{
const char JsonSequenceRecordSeparator = '\u001E';
@@ -151,10 +151,10 @@ private static LogEntry CreateTraceEntry(string category)
Message = "Trace message with values 3 and True.",
State = new Dictionary()
{
- { "{OriginalFormat}", "Trace message with values {value1} and {value2}." },
+ { "{OriginalFormat}", "Trace message with values {Value1} and {Value2}." },
{ "Message", "Trace message with values 3 and True." },
- { "value1", "3" },
- { "value2", "True" }
+ { "Value1", "3" },
+ { "Value2", "True" }
}
};
}
@@ -171,10 +171,10 @@ private static LogEntry CreateDebugEntry(string category)
Message = "Debug message with values f39a5065-732b-4cce-89d1-52e4af39e233 and (null).",
State = new Dictionary()
{
- { "{OriginalFormat}", "Debug message with values {value1} and {value2}." },
+ { "{OriginalFormat}", "Debug message with values {Value1} and {Value2}." },
{ "Message", "Debug message with values f39a5065-732b-4cce-89d1-52e4af39e233 and (null)." },
- { "value1", "f39a5065-732b-4cce-89d1-52e4af39e233" },
- { "value2", "(null)" }
+ { "Value1", "f39a5065-732b-4cce-89d1-52e4af39e233" },
+ { "Value2", "(null)" }
}
};
}
@@ -191,10 +191,10 @@ private static LogEntry CreateInformationEntry(string category)
Message = "Information message with values hello and goodbye.",
State = new Dictionary()
{
- { "{OriginalFormat}", "Information message with values {value1} and {value2}." },
+ { "{OriginalFormat}", "Information message with values {Value1} and {Value2}." },
{ "Message", "Information message with values hello and goodbye." },
- { "value1", "hello" },
- { "value2", "goodbye" }
+ { "Value1", "hello" },
+ { "Value2", "goodbye" }
}
};
}
@@ -231,10 +231,10 @@ private static LogEntry CreateErrorEntry(string category)
Message = "Error message with values a and 42.",
State = new Dictionary()
{
- { "{OriginalFormat}", "Error message with values {value1} and {value2}." },
+ { "{OriginalFormat}", "Error message with values {Value1} and {Value2}." },
{ "Message", "Error message with values a and 42." },
- { "value1", "a" },
- { "value2", "42" }
+ { "Value1", "a" },
+ { "Value2", "42" }
}
};
}
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/AppRunner.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/AppRunner.cs
index eec0447b21a..58d4a3b9688 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/AppRunner.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/AppRunner.cs
@@ -73,7 +73,7 @@ public Architecture? Architecture
public bool SetRuntimeIdentifier { get; set; } = true;
- public string ProfilerLogLevel { get; set; } = null;
+ public string ProfilerLogLevel { get; set; }
public AppRunner(ITestOutputHelper outputHelper, Assembly testAssembly, int appId = 1, TargetFrameworkMoniker tfm = TargetFrameworkMoniker.Current)
{
@@ -112,7 +112,7 @@ public async Task StartAsync(CancellationToken token)
{
if (string.IsNullOrEmpty(ScenarioName))
{
- throw new ArgumentNullException(nameof(ScenarioName));
+ throw new InvalidOperationException($"'{nameof(ScenarioName)}' is required.");
}
if (!File.Exists(_appPath))
@@ -130,7 +130,7 @@ public async Task StartAsync(CancellationToken token)
{
if (string.IsNullOrEmpty(DiagnosticPortPath))
{
- throw new ArgumentNullException(nameof(DiagnosticPortPath));
+ throw new InvalidOperationException($"'{nameof(DiagnosticPortPath)}' is required.");
}
_adapter.Environment.Add("DOTNET_DiagnosticPorts", DiagnosticPortPath);
@@ -210,7 +210,7 @@ private void HandleProgramEvent(ConsoleLogEvent logEvent)
switch ((TestAppLogEventIds)logEvent.EventId)
{
case TestAppLogEventIds.ScenarioState:
- Assert.True(logEvent.State.TryGetValue("state", out TestAppScenarios.SenarioState state));
+ Assert.True(logEvent.State.TryGetValue("State", out TestAppScenarios.SenarioState state));
switch (state)
{
case TestAppScenarios.SenarioState.Ready:
@@ -220,8 +220,8 @@ private void HandleProgramEvent(ConsoleLogEvent logEvent)
break;
case TestAppLogEventIds.ReceivedCommand:
Assert.NotNull(_currentCommandSource);
- Assert.True(logEvent.State.TryGetValue("expected", out bool expected));
- Assert.True(logEvent.State.TryGetValue("command", out _));
+ Assert.True(logEvent.State.TryGetValue("Expected", out bool expected));
+ Assert.True(logEvent.State.TryGetValue("Command", out _));
if (expected)
{
Assert.True(_currentCommandSource.TrySetResult(null));
@@ -232,8 +232,8 @@ private void HandleProgramEvent(ConsoleLogEvent logEvent)
}
break;
case TestAppLogEventIds.EnvironmentVariable:
- Assert.True(logEvent.State.TryGetValue("name", out string name));
- Assert.True(logEvent.State.TryGetValue("value", out string value));
+ Assert.True(logEvent.State.TryGetValue("Name", out string name));
+ Assert.True(logEvent.State.TryGetValue("Value", out string value));
lock (_waitingForEnvironmentVariables)
{
if (_waitingForEnvironmentVariables.TryGetValue(name, out TaskCompletionSource completedGettingVal))
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/DotNetRunner.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/DotNetRunner.cs
index 547ef08e439..3a62ce0f966 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/DotNetRunner.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/DotNetRunner.cs
@@ -1,6 +1,6 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information
+// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
@@ -32,7 +32,7 @@ public sealed class DotNetRunner : IDisposable
///
/// The architecture of the dotnet host.
///
- public Architecture? Architecture { get; set; } = null;
+ public Architecture? Architecture { get; set; }
///
/// The arguments to the entrypoint method.
@@ -52,7 +52,7 @@ public sealed class DotNetRunner : IDisposable
///
/// Gets a indicating if has been called and the process has been started.
///
- public bool HasStarted { get; private set; } = false;
+ public bool HasStarted { get; private set; }
///
/// Retrieves the exit code of the process.
@@ -133,7 +133,7 @@ public async Task StartAsync(CancellationToken token)
argsBuilder.Append(Path.ChangeExtension(EntrypointAssemblyPath, ".runtimeconfig.test.json"));
argsBuilder.Append("\" ");
}
- argsBuilder.Append("\"");
+ argsBuilder.Append('\"');
argsBuilder.Append(EntrypointAssemblyPath);
argsBuilder.Append("\" ");
argsBuilder.Append(Arguments);
@@ -163,7 +163,7 @@ public async Task StartAsync(CancellationToken token)
break;
}
- await Task.Delay(TimeSpan.FromMilliseconds(100));
+ await Task.Delay(TimeSpan.FromMilliseconds(100), token);
}
}
}
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/LoggingRunnerAdapter.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/LoggingRunnerAdapter.cs
index 7a7220f54a1..46b5573e0cc 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/LoggingRunnerAdapter.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/Runners/LoggingRunnerAdapter.cs
@@ -158,20 +158,26 @@ public async Task ReadToEnd(CancellationToken token)
private async Task ReadLinesAsync(StreamReader reader, List lines, Action callback, CancellationToken cancelToken)
{
+#if !NET7_0_OR_GREATER
// Closing the reader to cancel the async await will dispose the underlying stream.
// Technically, this means the reader/stream cannot be used after canceling reading of lines
// from the process, but this is probably okay since the adapter is already logging each line
// and providing a callback to callers to read each line. It's unlikely the reader/stream will
// be accessed after this adapter is disposed.
- using var cancelReg = cancelToken.Register(() => reader.Close());
+ using var cancelReg = cancelToken.Register(reader.Close);
+#endif
try
{
bool readAborted = false;
while (!_finishReads)
{
- // ReadLineAsync does not have cancellation
+#if NET7_0_OR_GREATER
+ string line = await reader.ReadLineAsync(cancelToken).ConfigureAwait(false);
+#else
+ // ReadLineAsync does not have cancellation in 6.0 or lower
string line = await reader.ReadLineAsync().ConfigureAwait(false);
+#endif
if (null == line)
{
@@ -184,10 +190,15 @@ private async Task ReadLinesAsync(StreamReader reader, List lines, Actio
}
// If the loop ended because _finishReads was set, we should read to the end of the
- // stream if readAborded is not set. This is so we can ensure that the entire stream is read.
+ // stream if readAborted is not set. This is so we can ensure that the entire stream is read.
if (!readAborted && _finishReads)
{
+#if NET7_0_OR_GREATER
+ string remainder = await reader.ReadToEndAsync(cancelToken).ConfigureAwait(false);
+#else
+ // ReadToEndAsync does not have cancellation in 6.0 or lower
string remainder = await reader.ReadToEndAsync().ConfigureAwait(false);
+#endif
foreach (string line in remainder.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None))
{
lines.Add(line);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/StreamExtensions.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/StreamExtensions.cs
index 4ae4bcb6b49..55e144346e6 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/StreamExtensions.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.TestCommon/StreamExtensions.cs
@@ -1,4 +1,9 @@
-using System.IO;
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
@@ -10,10 +15,11 @@ internal static class StreamExtensions
public static async Task ReadBytesAsync(this Stream stream, int length, CancellationToken cancellationToken)
{
byte[] buffer = new byte[length];
+ Memory memory = buffer;
int read;
int total = 0;
- while (total < buffer.Length && 0 != (read = await stream.ReadAsync(buffer, total, buffer.Length - total, cancellationToken)))
+ while (total < buffer.Length && 0 != (read = await stream.ReadAsync(memory.Slice(total), cancellationToken)))
{
total += read;
}
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs
index f1bf3d163a0..d6f06fb41b6 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/CollectionRuleDescriptionTests.cs
@@ -347,7 +347,7 @@ await ScenarioRunner.SingleTarget(
});
}
- private void ValidateCollectionRuleDescriptions(Dictionary expectedCollectionRuleDescriptions, Dictionary actualCollectionRuleDescriptions)
+ private static void ValidateCollectionRuleDescriptions(Dictionary expectedCollectionRuleDescriptions, Dictionary actualCollectionRuleDescriptions)
{
Assert.Equal(actualCollectionRuleDescriptions.Keys.Count, expectedCollectionRuleDescriptions.Keys.Count);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/EgressTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/EgressTests.cs
index a0063520647..d065f63b68a 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/EgressTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/EgressTests.cs
@@ -297,7 +297,7 @@ public static bool IsNotCore31OnOSX()
#endif
}
- private async Task TraceWithDelay(ApiClient client, int processId, bool delay = true)
+ private static async Task TraceWithDelay(ApiClient client, int processId, bool delay = true)
{
HttpResponseMessage message = await client.ApiCall(FormattableString.Invariant($"/trace?pid={processId}&durationSeconds=-1"));
if (delay)
@@ -307,12 +307,12 @@ private async Task TraceWithDelay(ApiClient client, int pro
return message;
}
- private Task EgressDirect(ApiClient client, int processId)
+ private static Task EgressDirect(ApiClient client, int processId)
{
return client.ApiCall(FormattableString.Invariant($"/trace?pid={processId}&egressProvider={FileProviderName}"));
}
- private async Task EgressTraceWithDelay(ApiClient apiClient, int processId, bool delay = true)
+ private static async Task EgressTraceWithDelay(ApiClient apiClient, int processId, bool delay = true)
{
try
{
@@ -329,13 +329,13 @@ private async Task EgressTraceWithDelay(ApiClient apiClient,
}
}
- private async Task CancelEgressOperation(ApiClient apiClient, OperationResponse response)
+ private static async Task CancelEgressOperation(ApiClient apiClient, OperationResponse response)
{
HttpStatusCode deleteStatus = await apiClient.CancelEgressOperation(response.OperationUri);
Assert.Equal(HttpStatusCode.OK, deleteStatus);
}
- private void ValidateOperation(OperationStatus expected, OperationSummary summary)
+ private static void ValidateOperation(OperationStatus expected, OperationSummary summary)
{
Assert.Equal(expected.OperationId, summary.OperationId);
Assert.Equal(expected.Status, summary.Status);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs
index 5cc7bffb987..fe165f03967 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/HttpApi/ApiClient.cs
@@ -216,7 +216,7 @@ public Task CaptureDumpAsync(Guid uid, DumpType dumpType,
private async Task CaptureDumpAsync(string processQuery, DumpType dumpType, CancellationToken token)
{
- using HttpRequestMessage request = new(HttpMethod.Get, $"/dump?{processQuery}&type={dumpType.ToString("G")}");
+ using HttpRequestMessage request = new(HttpMethod.Get, $"/dump?{processQuery}&type={dumpType:G}");
request.Headers.Add(HeaderNames.Accept, ContentTypes.ApplicationOctetStream);
using DisposableBox responseBox = new(
@@ -416,7 +416,7 @@ public async Task GetMetricsAsync(CancellationToken token)
{
case HttpStatusCode.OK:
ValidateContentType(response, ContentTypes.TextPlain);
- return await response.Content.ReadAsStringAsync().ConfigureAwait(false);
+ return await response.Content.ReadAsStringAsync(token).ConfigureAwait(false);
case HttpStatusCode.BadRequest:
ValidateContentType(response, ContentTypes.ApplicationProblemJson);
throw await CreateValidationProblemDetailsExceptionAsync(response).ConfigureAwait(false);
@@ -655,7 +655,7 @@ private static void ThrowIfNotSuccess(HttpResponseMessage responseMessage)
}
}
- private void ValidateContentType(HttpResponseMessage responseMessage, string expectedMediaType)
+ private static void ValidateContentType(HttpResponseMessage responseMessage, string expectedMediaType)
{
Assert.Equal(expectedMediaType, responseMessage.Content.Headers.ContentType?.MediaType);
}
@@ -665,7 +665,7 @@ private static string CreateLogsUriString(string processIdentifierQuery, TimeSpa
StringBuilder routeBuilder = new();
routeBuilder.Append("/logs?");
routeBuilder.Append(processIdentifierQuery);
- routeBuilder.Append("&");
+ routeBuilder.Append('&');
AppendDuration(routeBuilder, duration);
if (logLevel.HasValue)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ProcessTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ProcessTests.cs
index b6bce7da05b..76df47c9fba 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ProcessTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/ProcessTests.cs
@@ -267,7 +267,7 @@ private void VerifyProcessInfoEquality(List processInfos)
///
/// Verifies that an invalid Process request throws the correct exception (ValidationProblemDetailsException) and has the correct Status and StatusCode.
///
- private async Task VerifyInvalidRequestException(ApiClient client, int? pid, Guid? uid, string name)
+ private static async Task VerifyInvalidRequestException(ApiClient client, int? pid, Guid? uid, string name)
{
ValidationProblemDetailsException validationProblemDetailsException = await Assert.ThrowsAsync(
() => client.GetProcessAsync(pid: pid, uid: uid, name: name));
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/Runners/MonitorGenerateKeyRunner.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/Runners/MonitorGenerateKeyRunner.cs
index 82e702d8750..a120839a159 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/Runners/MonitorGenerateKeyRunner.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.FunctionalTests/Runners/MonitorGenerateKeyRunner.cs
@@ -80,11 +80,11 @@ internal sealed class MonitorGenerateKeyRunner : MonitorRunner
///
/// A bool indicating if has been called and the field should not be updated.
///
- private bool _executionStarted = false;
+ private bool _executionStarted;
///
/// A value indicating which format is being used. This should not be updated after is called.
///
- private OutputFormat? _selectedFormat = null;
+ private OutputFormat? _selectedFormat;
///
/// Gets the that was used to execute dotnet-monitor. If is set to then
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestHostingStartup/BuildOutputSharedLibraryInitializer.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestHostingStartup/BuildOutputSharedLibraryInitializer.cs
index 3a93456dd05..63b7c5edbc8 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestHostingStartup/BuildOutputSharedLibraryInitializer.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestHostingStartup/BuildOutputSharedLibraryInitializer.cs
@@ -31,7 +31,7 @@ public INativeFileProviderFactory Initialize()
return new Factory();
}
- private class Factory : INativeFileProviderFactory
+ private sealed class Factory : INativeFileProviderFactory
{
public IFileProvider Create(string runtimeIdentifier)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestStartupHook/StartupHook.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestStartupHook/StartupHook.cs
index 53d7c52a138..0a83e0235e5 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestStartupHook/StartupHook.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.TestStartupHook/StartupHook.cs
@@ -6,7 +6,9 @@
using System.Reflection;
using System.Runtime.Loader;
+#pragma warning disable CA1050 // Declare types in namespaces
public sealed class StartupHook
+#pragma warning restore CA1050 // Declare types in namespaces
{
private const string TestHostingStartupAssemblyName = "Microsoft.Diagnostics.Monitoring.Tool.TestHostingStartup";
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/BuiltInTriggerTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/BuiltInTriggerTests.cs
index d0139b1b87c..271285f1665 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/BuiltInTriggerTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/BuiltInTriggerTests.cs
@@ -149,7 +149,7 @@ public void CPUUsageTrigger_CorrectDefaultOptions()
ValidateEventCounterOptionsTranslation(expectedSettings, eventCounterOptions);
}
- private void ValidateEventCounterOptionsTranslation(EventCounterOptions expected, EventCounterOptions actual)
+ private static void ValidateEventCounterOptionsTranslation(EventCounterOptions expected, EventCounterOptions actual)
{
Assert.Equal(expected.CounterName, actual.CounterName);
Assert.Equal(expected.ProviderName, actual.ProviderName);
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTests.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTests.cs
index 5fad31b754e..b5a45fd64f3 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTests.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTests.cs
@@ -364,7 +364,7 @@ private void VerifyExecutionCount(CallbackActionService service, int expectedCou
Assert.Equal(expectedCount, service.ExecutionTimestamps.Count);
}
- private async Task ManualTriggerBurstAsync(ManualTriggerService service, int count = 10)
+ private static async Task ManualTriggerBurstAsync(ManualTriggerService service, int count = 10)
{
for (int i = 0; i < count; i++)
{
diff --git a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTestsHelper.cs b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTestsHelper.cs
index 1bc8af516a0..cb44cc6ccf2 100644
--- a/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTestsHelper.cs
+++ b/src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRulePipelineTestsHelper.cs
@@ -25,7 +25,7 @@
namespace Microsoft.Diagnostics.Monitoring.Tool.UnitTests
{
- internal class CollectionRulePipelineTestsHelper
+ internal static class CollectionRulePipelineTestsHelper
{
internal static async Task ExecuteScenario(
TargetFrameworkMoniker tfm,
@@ -96,7 +96,7 @@ await TestHostHelper.CreateCollectionRulesHost(
/// that the actions are invoked for the number of expected iterations () and
/// are throttled for the remaining number of iterations.
///
- internal async static Task ManualTriggerAsync(
+ internal static async Task ManualTriggerAsync(
ManualTriggerService triggerService,
CallbackActionService callbackService,
PipelineCallbacks callbacks,
@@ -184,7 +184,7 @@ internal async static Task ManualTriggerAsync(
Assert.False(actionStartedTask.IsCompleted);
}
- internal class PipelineCallbacks
+ internal sealed class PipelineCallbacks
{
private readonly List _entries = new();
@@ -247,7 +247,7 @@ private void NotifyCompletions(PipelineCallbackType callbackType)
public int StartedCount => _startedCount;
- private class CompletionEntry
+ private sealed class CompletionEntry
{
private readonly TaskCompletionSource
- public ICollectionRuleTrigger Create(
+ public static ICollectionRuleTrigger Create(
IEndpointInfo endpointInfo,
MonitoringSourceConfiguration configuration,
ITraceEventTriggerFactory factory,
diff --git a/src/Tools/dotnet-monitor/ConfigurationJsonWriter.cs b/src/Tools/dotnet-monitor/ConfigurationJsonWriter.cs
index a89814f272f..747f3a6ca7a 100644
--- a/src/Tools/dotnet-monitor/ConfigurationJsonWriter.cs
+++ b/src/Tools/dotnet-monitor/ConfigurationJsonWriter.cs
@@ -277,7 +277,7 @@ private string GetConfigurationProvider(IConfigurationSection section, bool show
return string.Empty;
}
- private bool CanWriteChildren(IConfigurationSection section, IEnumerable children)
+ private static bool CanWriteChildren(IConfigurationSection section, IEnumerable children)
{
if (section.Path.Equals(nameof(RootOptions.DiagnosticPort)))
{
@@ -305,7 +305,7 @@ private void ProcessChildren(IConfigurationSection section, bool includeChildSec
}
}
- private bool CheckForSequentialIndices(IEnumerable children)
+ private static bool CheckForSequentialIndices(IEnumerable children)
{
int indexValue = 0;
diff --git a/src/Tools/dotnet-monitor/ConfigurationTokenParser.cs b/src/Tools/dotnet-monitor/ConfigurationTokenParser.cs
index 5f09941bf1f..42e09a40d1f 100644
--- a/src/Tools/dotnet-monitor/ConfigurationTokenParser.cs
+++ b/src/Tools/dotnet-monitor/ConfigurationTokenParser.cs
@@ -91,7 +91,7 @@ public bool TryCloneSettings(object originalSettings, ref object settings)
return true;
}
- public IEnumerable GetPropertiesFromSettings(object settings, Predicate predicate = null) =>
+ public static IEnumerable GetPropertiesFromSettings(object settings, Predicate predicate = null) =>
settings?.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p => p.PropertyType == typeof(string) && (predicate?.Invoke(p) ?? true)) ??
diff --git a/src/Tools/dotnet-monitor/DisposableHelper.cs b/src/Tools/dotnet-monitor/DisposableHelper.cs
index aa81c551545..295dc68a161 100644
--- a/src/Tools/dotnet-monitor/DisposableHelper.cs
+++ b/src/Tools/dotnet-monitor/DisposableHelper.cs
@@ -14,8 +14,8 @@ namespace Microsoft.Diagnostics.Tools.Monitor
{
internal static class DisposableHelper
{
- private static readonly long DisposeStateActive = default(long);
- private static readonly long DisposeStateDisposed = 1;
+ private const long DisposeStateActive = default(long);
+ private const long DisposeStateDisposed = 1;
///
/// Inspects the parameter to check if the object has been disposed already.
diff --git a/src/Tools/dotnet-monitor/DynamicNamedOptionsCache.cs b/src/Tools/dotnet-monitor/DynamicNamedOptionsCache.cs
index 07505356e11..7a7278fd2f0 100644
--- a/src/Tools/dotnet-monitor/DynamicNamedOptionsCache.cs
+++ b/src/Tools/dotnet-monitor/DynamicNamedOptionsCache.cs
@@ -67,7 +67,7 @@ public override bool TryRemove(string name)
return base.TryRemove(name);
}
- private bool IsDefaultName(string name)
+ private static bool IsDefaultName(string name)
{
return string.Equals(name, Options.DefaultName, StringComparison.Ordinal);
}
diff --git a/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.AutoFlushStream.cs b/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.AutoFlushStream.cs
index 30fa036c9b1..c7ae2ddf49f 100644
--- a/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.AutoFlushStream.cs
+++ b/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.AutoFlushStream.cs
@@ -42,6 +42,8 @@ public override Task CopyToAsync(Stream destination, int bufferSize, Cancellatio
_baseStream.CopyToAsync(destination, bufferSize, cancellationToken);
public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) =>
_baseStream.ReadAsync(buffer, offset, count, cancellationToken);
+ public override ValueTask ReadAsync(Memory buffer, CancellationToken cancellationToken = default) =>
+ _baseStream.ReadAsync(buffer, cancellationToken);
public override int ReadByte() => _baseStream.ReadByte();
//CONSIDER These are not really used, but should still autoflush.
@@ -66,8 +68,13 @@ public override void WriteByte(byte value)
public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
{
- await _baseStream.WriteAsync(buffer, offset, count, cancellationToken);
- await ProcessWriteAsync(count, cancellationToken);
+ await WriteAsync(buffer.AsMemory(offset, count), cancellationToken);
+ }
+
+ public override async ValueTask WriteAsync(ReadOnlyMemory buffer, CancellationToken cancellationToken = default)
+ {
+ await _baseStream.WriteAsync(buffer, cancellationToken);
+ await ProcessWriteAsync(buffer.Length, cancellationToken);
}
public override void Flush()
diff --git a/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.cs b/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.cs
index 55b3a9c3d6b..e9f9fcbf75d 100644
--- a/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.cs
+++ b/src/Tools/dotnet-monitor/Egress/AzureBlob/AzureBlobEgressProvider.cs
@@ -212,7 +212,7 @@ private bool CheckQueueEgressOptions(AzureBlobEgressProviderOptions options)
return queueNameSet && queueAccountUriSet;
}
- private Uri GetBlobAccountUri(AzureBlobEgressProviderOptions options, out string accountName)
+ private static Uri GetBlobAccountUri(AzureBlobEgressProviderOptions options, out string accountName)
{
var blobUriBuilder = new BlobUriBuilder(options.AccountUri);
blobUriBuilder.Query = null;
@@ -224,7 +224,7 @@ private Uri GetBlobAccountUri(AzureBlobEgressProviderOptions options, out string
return blobUriBuilder.ToUri();
}
- private Uri GetQueueAccountUri(AzureBlobEgressProviderOptions options, out string accountName)
+ private static Uri GetQueueAccountUri(AzureBlobEgressProviderOptions options, out string accountName)
{
var queueUriBuilder = new QueueUriBuilder(options.QueueAccountUri);
@@ -253,7 +253,7 @@ private async Task EgressMessageToQueue(string blobName, AzureBlobEgressProvider
}
}
- private async Task GetQueueClientAsync(AzureBlobEgressProviderOptions options, CancellationToken token)
+ private static async Task GetQueueClientAsync(AzureBlobEgressProviderOptions options, CancellationToken token)
{
QueueClientOptions clientOptions = new()
{
@@ -322,7 +322,7 @@ private async Task GetQueueClientAsync(AzureBlobEgressProviderOptio
return queueClient;
}
- private async Task GetBlobContainerClientAsync(AzureBlobEgressProviderOptions options, CancellationToken token)
+ private static async Task GetBlobContainerClientAsync(AzureBlobEgressProviderOptions options, CancellationToken token)
{
bool mayHaveLimitedPermissions = false;
BlobServiceClient serviceClient;
@@ -376,7 +376,7 @@ private async Task GetBlobContainerClientAsync(AzureBlobEgr
return containerClient;
}
- private string GetBlobName(AzureBlobEgressProviderOptions options, EgressArtifactSettings artifactSettings)
+ private static string GetBlobName(AzureBlobEgressProviderOptions options, EgressArtifactSettings artifactSettings)
{
if (string.IsNullOrEmpty(options.BlobPrefix))
{
@@ -388,7 +388,7 @@ private string GetBlobName(AzureBlobEgressProviderOptions options, EgressArtifac
}
}
- private BlobHttpHeaders CreateHttpHeaders(EgressArtifactSettings artifactSettings)
+ private static BlobHttpHeaders CreateHttpHeaders(EgressArtifactSettings artifactSettings)
{
BlobHttpHeaders headers = new BlobHttpHeaders();
headers.ContentEncoding = artifactSettings.ContentEncoding;
diff --git a/src/Tools/dotnet-monitor/EndpointInfo/ServerEndpointInfoSource.cs b/src/Tools/dotnet-monitor/EndpointInfo/ServerEndpointInfoSource.cs
index 7738a7582ab..928621100f5 100644
--- a/src/Tools/dotnet-monitor/EndpointInfo/ServerEndpointInfoSource.cs
+++ b/src/Tools/dotnet-monitor/EndpointInfo/ServerEndpointInfoSource.cs
@@ -210,7 +210,7 @@ private async Task MonitorEndpointsAsync(CancellationToken token)
{
while (!token.IsCancellationRequested)
{
- await Task.Delay(PruningInterval);
+ await Task.Delay(PruningInterval, token);
await PruneEndpointsAsync(validEndpoints: null, token);
}
diff --git a/src/Tools/dotnet-monitor/FilteredEndpointInfoSource.cs b/src/Tools/dotnet-monitor/FilteredEndpointInfoSource.cs
index c04b6f82f4e..2f9ee0db046 100644
--- a/src/Tools/dotnet-monitor/FilteredEndpointInfoSource.cs
+++ b/src/Tools/dotnet-monitor/FilteredEndpointInfoSource.cs
@@ -51,7 +51,7 @@ public FilteredEndpointInfoSource(
// Filter out the current process based on the connection mode.
if (RuntimeInfo.IsDiagnosticsEnabled)
{
- int pid = Process.GetCurrentProcess().Id;
+ int pid = Environment.ProcessId;
// Regardless of connection mode, can use the runtime instance cookie to filter self out.
try
diff --git a/src/Tools/dotnet-monitor/Program.cs b/src/Tools/dotnet-monitor/Program.cs
index 0abc4ffdd48..6bd0026ee89 100644
--- a/src/Tools/dotnet-monitor/Program.cs
+++ b/src/Tools/dotnet-monitor/Program.cs
@@ -11,7 +11,7 @@
namespace Microsoft.Diagnostics.Tools.Monitor
{
- class Program
+ internal static class Program
{
private static Command GenerateApiKeyCommand()
{
diff --git a/src/Tools/dotnet-monitor/RootOptions.cs b/src/Tools/dotnet-monitor/RootOptions.cs
index 1dfd8f21549..7658335c2ae 100644
--- a/src/Tools/dotnet-monitor/RootOptions.cs
+++ b/src/Tools/dotnet-monitor/RootOptions.cs
@@ -9,7 +9,7 @@
namespace Microsoft.Diagnostics.Tools.Monitor
{
- internal partial class RootOptions
+ internal sealed partial class RootOptions
{
public AuthenticationOptions Authentication { get; set; }
diff --git a/src/Tools/dotnet-monitor/Startup.cs b/src/Tools/dotnet-monitor/Startup.cs
index f08788c6486..f91b19437ed 100644
--- a/src/Tools/dotnet-monitor/Startup.cs
+++ b/src/Tools/dotnet-monitor/Startup.cs
@@ -70,7 +70,7 @@ public void ConfigureServices(IServiceCollection services)
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
- public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions corsOptions)
+ public static void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions corsOptions)
{
if (env.IsDevelopment())
{
diff --git a/src/Tools/dotnet-monitor/TaskExtensions.cs b/src/Tools/dotnet-monitor/TaskExtensions.cs
index 77c7b81a856..8929720448d 100644
--- a/src/Tools/dotnet-monitor/TaskExtensions.cs
+++ b/src/Tools/dotnet-monitor/TaskExtensions.cs
@@ -21,7 +21,11 @@ internal static class TaskExtensions
///
public static Task SafeAwait(this Task task)
{
- return task.ContinueWith(_ => { }, TaskContinuationOptions.ExecuteSynchronously);
+ return task.ContinueWith(
+ _ => { },
+ CancellationToken.None,
+ TaskContinuationOptions.ExecuteSynchronously,
+ TaskScheduler.Default);
}
public static async Task WithCancellation(this Task task, CancellationToken token)