I have started learning C#/.NET/VisualStudio (2022) and have this strange problem; all the methods/classes in System and it's nested namespaces seem to be available without full path or using directives at beginning.
E.g. the following example compiles just fine:
// Program.cs
namespace MyApp
{
internal class Program
{
static void Main()
{
Console.WriteLine("Hello World!"); //System.Console
}
static HttpClient client = new HttpClient(); //System.Net.Http.HttpClient
}
}
Why this happens and can I disable this behavior somehow?
CodePudding user response:
If you are using .NET 6, this is likely from a new feature called "Implicit Usings". Depending on your project type, certain namespaces are automatically included. For example, the default console app template implicity includes the following namespaces:
- System;
- System.IO;
- System.Collections.Generic;
- System.Linq;
- System.Net.Http;
- System.Threading;
- System.Threading.Tasks;
You can disable this feature by including the following in your project file:
<PropertyGroup>
<ImplicitUsings>disable</ImplicitUsings>
</PropertyGroup>
There is further documentation on this feature and "Global Usings" in this Microsoft documentation.
CodePudding user response:
You are using implicit global usings. Change the lines in your .csproj
files from
<ImplicitUsings>enable</ImplicitUsings>
to
<ImplicitUsings>disable</ImplicitUsings>