Starting with C# 10, it's possible to define https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive#global-modifier[global usings] for an entire project. They reduce the need for repetitive namespace inclusions, but can also mask which namespaces are truly necessary for the code at hand. Over-relying on them can lead to less transparent code dependencies, especially for newcomers to the project.
=== Exceptions
The rule will not raise a warning for `global using` directives, even if none of the types of that namespace are used in the project:
While it's not difficult to remove these unneeded lines manually, modern code editors support the removal of every unnecessary `using` directive with a single click from every file of the project.
=== Code examples
==== Noncompliant code example
[source,csharp,diff-id=1,diff-type=noncompliant]
----
using System.IO;
using System.Linq;
using System.Collections.Generic; // Noncompliant - no types are used from this namespace
using MyApp.Helpers; // Noncompliant - FileHelper is in the same namespace
using MyCustomNamespace; // Noncompliant - no types are used from this namespace
=== on 23 Sep 2019, 16:37:14 Nicolas Harraudeau wrote:
*OUT OF SCOPE*
Duplicate imports are out of scopes as Roslyn already raises an issue in this case. As Roslyn issues are enabled by default thiswould simply create duplicates.
=== on 18 Dec 2020, 10:06:15 Andrei Epure wrote:
We are removing this rule from SonarWay due to its performance issues. After the rule gets re-designed to avoid perf issues, (see https://github.com/SonarSource/sonar-dotnet/issues/3761[#3761]), we should bring it back to SonarWay.