【问题标题】:Where are the using statements/directives in .NET 6.NET 6 中的 using 语句/指令在哪里
【发布时间】:2021-10-27 12:43:17
【问题描述】:

我已经开始使用 Visual Studio 2022 Preview 并运行了几天。

第一次震惊,没有 Startup.cs。没关系,看了一下,我知道 Startup 被删除了。

今天又挨了一记耳光。我看不到 using 语句。在这里。

我刚刚创建了一个全新的 .NET 6 Web 应用程序,当我将鼠标悬停在 WebApplication 类上时,我意识到它保留在 Microsoft.AspNetCore.Builder 命名空间中。生成的 Program.cs 类如下所示。

那么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();

【问题讨论】:

  • 您的应用程序中是否有global using Microsoft.AspNetCore.Builder;?否则,this feature 似乎会向您的应用程序添加各种全局使用,除非您在 obj 文件夹中进行挖掘,否则这些是不可知的。好玩!
  • using 指令using 语句是那些作为语句出现在主体和控制处置中的语句。如果您使用正确的短语并查看using directive 的文档,您就会看到这种新行为的解释。
  • @Nathan Cooper,不,我没有
  • @Damien_The_Unbeliever,是的,它的 using 指令。

标签: c# c#-9.0 .net-6.0 c#-10.0


【解决方案1】:

C# 10.0 引入了一个名为 global using directive (global using <fully-qualified-namespace>;) 的新功能,它允许在编译中的所有文件中指定要隐式导入的命名空间。 .NET 6 RC1 在新项目模板中默认启用此功能(请参阅 .csproj 中的 <ImplicitUsings>enable</ImplicitUsings> 属性)。

对于Microsoft.NET.Sdk.Web,应隐式导入下一个命名空间(加上来自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;

【讨论】:

  • 嗨@Guru Stron,谢谢。是的,我的 WebApplication1.csproj 文件中的 enable 确实有一个标签。那么现在,在我安装 .net 6 Sdk 时,是否有一个位于全球的文件?如果是,地点在哪里?我可以自定义,也就是说,我可以添加一些我觉得作为开发人员经常使用的 using 指令吗?
  • @VivekDev 包含默认导入的生成文件将位于obj 文件夹中,名称类似于ProjectName.GlobalUsings.g.cs。至于添加全局指令 - 您可以在任何文件中的 using 指令上使用 global 修饰符(或为全局使用创建单独的指令)或将 &lt;Using Include="SomeFullyQualifiedNamespace" /&gt; 添加到您的 .csproj。
【解决方案2】:

您似乎仍然可以在 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();
...

【讨论】:

    【解决方案3】:
    • 在 .net 6.0 中你不需要添加一些命名空间,因为默认情况下它们是令人兴奋的。

    • 例如:-

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

    • 那么在哪里可以找到呢?并且知道我的项目中默认安装的所有命名空间。

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

    • 所以默认情况下:-

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

    • 如果您的应用程序是 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多