Home > Back-end >  C#/.NET VisualStudio, namespace problem
C#/.NET VisualStudio, namespace problem

Time:03-30

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>
  • Related