.NET 6 中的 using statements/directives 在哪里

Where are the using statements/directives in .NET 6

我起来 运行 Visual Studio 2022 预览几天了。

得到了第一个震撼,没有Startup.cs。没关系,稍微阅读一下,我知道 Startup 已被删除。

今天又挨了一巴掌。我看不到 using 语句。在这里。

我刚刚创建了一个全新的 .NET 6 网络应用程序,当我将鼠标悬停在 WebApplication class 上时,我意识到它位于 Microsoft.AspNetCore.Builder 命名空间中。生成的 Program.cs class 看起来像这样。

那么 using Microsoft.AspNetCore.Builder; 语句在哪里?

有什么魔力?为什么 .net 变得越来越神秘?

完整的Program.cs文件如下。

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

C# 10.0 引入了一项名为 global using directive (global using <fully-qualified-namespace>;) which allows to specify namespaces to be implicitly imported in all files in the compilation. .NET 6 RC1 的新功能,默认情况下在新项目模板中启用此功能(请参阅 .csproj 中的 <ImplicitUsings>enable</ImplicitUsings> 属性)。

对于 Microsoft.NET.Sdk.Web next namespaces 应该隐式导入(加上来自 Microsoft.NET.Sdk 的):

  • System.Net.Http.Json
  • Microsoft.AspNetCore.Builder
  • Microsoft.AspNetCore.Hosting
  • Microsoft.AspNetCore.Http
  • Microsoft.AspNetCore.Routing
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Hosting
  • Microsoft.Extensions.Logging

UPD

在评论中解决您的问题:

在编写包含默认导入的生成文件时,将位于 obj 文件夹中,名称类似于 ProjectName.GlobalUsings.g.cs.

要修改默认导入,您可以将 Using 元素添加到 .csproj 文件中。基于公开的属性,它允许包括添加和删除在内的多种操作:

<ItemGroup>
    <Using Include="SomeFullyQualifiedNamespace"/>
</ItemGroup>

对于添加,您可以在任何文件中简单地在 using 指令前加上 global 修饰符(或为此创建一个单独的修饰符):

global using SomeFullyQualifiedNamespace;

看来您仍然可以在 Program.cs 的顶部添加自己的 using 指令。我知道我没有向您展示我的所有代码,但我能够构建 运行 看起来像这样的东西:

using MvcPrototype1.DataAccess;
using MvcPrototype1.DataAccess.Interfaces;


var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews()
    .AddXmlSerializerFormatters();

builder.Services.AddScoped<IAddressRepository, AddressRepository>();
builder.Services.AddAutoMapper(typeof(Program));

var app = builder.Build();
...
  • 在 .net 6.0 中你不需要添加一些命名空间,因为它们默认是兴奋的。

  • 例如:-

  • 这里我们不必使用命名空间,因为它默认存在。

  • 那么去哪里找呢?并了解我的项目中默认安装的所有命名空间。

  • 只需转到.csproj 项目文件,您就会发现启用 就是这样。

  • 所以默认:-

  • 如果您的应用程序是控制台应用程序,则默认安装此包:-
    1 - 系统
    2 - System.Collections.Generic
    3 - System.IO
    4 - System.Linq
    5 - System.Net.Http
    6 - System.Threading
    7 - System.Threading.任务

  • 如果您的应用程序是 Web 应用程序,则默认安装此包:-
    1 - System.Net.Http.Json
    2 - Microsoft.AspNetCore.Builder
    3 - Microsoft.AspNetCore.Hosting
    4 - Microsoft.AspNetCore.Http
    5 - Microsoft.AspNetCore.Routing
    6 - Microsoft.Extensions.Configuration
    7 - Microsoft.Extensions.DependencyInjection
    8 - Microsoft.Extensions.Hosting
    9 - Microsoft.Extensions.Logging