【问题标题】:Issue when creating a new ASP.NET Core 6.0 Web API创建新的 ASP.NET Core 6.0 Web API 时出现问题
【发布时间】:2021-11-11 13:56:51
【问题描述】:

我尝试在 ASP.NET Core 6.0 中创建一个新的 Web API,如 https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-6.0&tabs=visual-studio-code#create-a-web-project 所示。

但它是用错误创建的。

这是我的新项目的WeatherForecastController

using Microsoft.AspNetCore.Mvc;

// see here This is ends with ";". And showing this error "{ expected [TodoApi]"
namespace TodoApi.Controllers; 

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    // some code
}

WeatherForecast 类看起来像这样

// see here This is ends with ";". And showing this error "{ expected [TodoApi]"
namespace TodoApi;   

public class WeatherForecast
{
    // some code
}

而且所有命名空间都不见了。

program.cs 文件看起来像这样;创建时它没有任何命名空间:

var builder = WebApplication.CreateBuilder(args);

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

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

//.......

TodoApi.GlobalUsings.g.cs文件也有错误

// <auto-generated/>
global using global::Microsoft.AspNetCore.Builder;
global using global::Microsoft.AspNetCore.Hosting;
global using global::Microsoft.AspNetCore.Http;
global using global::Microsoft.AspNetCore.Routing;
global using global::Microsoft.Extensions.Configuration;
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Extensions.Hosting;
global using global::Microsoft.Extensions.Logging;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Net.Http.Json;
global using global::System.Threading;
global using global::System.Threading.Tasks;

dotnet --info 的输出是

.NET SDK (reflecting any global.json):
 Version:   6.0.100
 Commit:    9e8b04bbff

Runtime Environment:
 OS Name:     ubuntu
 OS Version:  20.04
 OS Platform: Linux
 RID:         ubuntu.20.04-x64
 Base Path:   /snap/dotnet-sdk/147/sdk/6.0.100/

Host (useful for support):
  Version: 6.0.0
  Commit:  4822e3c3aa

.NET SDKs installed:
  6.0.100 [/snap/dotnet-sdk/147/sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.0 [/snap/dotnet-sdk/147/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.0 [/snap/dotnet-sdk/147/shared/Microsoft.NETCore.App]

To install additional .NET runtimes or SDKs:
  https://aka.ms/dotnet-download

但是如果我创建一个 ASP.NET Core 3.1 项目,它不会显示这些错误(我安装了 ASP.NET Core 3.1 来创建 ASP.NET Core 3.1 Web API)。

不知道为什么新建 ASP.NET Core 6.0 Web API 项目时会出现这些错误。

有人知道吗?

编辑:我正在使用 Visual Studio 代码。 和 TodoApi.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
  </ItemGroup>

</Project>

【问题讨论】:

  • 你可能有一个旧的 Visual Studio 版本。安装 2022 以获得正确的 C# 10 支持。或者,如果您正在使用,请更新 VS Code 的 C# 插件。
  • csproj中设置了什么语言版本?
  • 缺少命名空间和程序类是非常好的。它是 C# 10 和 .NET 6 中的一个新特性(或一些新特性)。
  • 请阅读How to Ask 并更新您的标题和正文。 “问题”和“错误”并不能帮助我们解决问题,而且您使用 Visual Studio Code 的唯一证据是您发布的链接之一。提及确切的错误和使用的软件。另请参阅我的第一条评论。
  • it is created with errors. 你没有发布任何错误。 .NET 6 工作得很好 - 从 ASP.NET Core Web API 和 Blazor WASM 项目的 Preview 1 开始我就一直在使用它

标签: c# asp.net-core asp.net-core-webapi asp.net-core-6.0


【解决方案1】:

这里有几个 C# 的新特性。

首先,在 Program.cs 中,Program 类“缺失”,因为有一个名为“顶级程序”的新功能。

https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/#top-level-programs

缺少命名空间是因为“全局和隐式使用”为您提供了一些全局包含的标准命名空间。

https://devblogs.microsoft.com/dotnet/announcing-net-6/#global-using-directives

至于后面有分号的命名空间是“文件范围的命名空间”,这与将整个文件包装在命名空间中相同,但不需要缩进所有内容。

https://devblogs.microsoft.com/dotnet/announcing-net-6/#file-scoped-namespaces

如果您使用的是 Visual Studio 2019,则需要更新到 Visual Studio 2022 才能使用所有这些功能。 VSCode 应该自动将 C# 扩展更新到最新版本,但如果没有(或者您禁用了自动更新),您可能需要手动更新它。

https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp

【讨论】:

  • “如果你使用 VSCode 和命令行工具,应该没问题” - 不,VS Code 还需要更新 OmniSharp C# 插件以支持新的语法。
  • 是的,但是由于 VSCode 会自动更新扩展,这可能不会成为问题。
  • 如果是这样,OP就不会出现这个问题。他们禁用了自动更新,或者没有重新启动 VS Code,或者无法访问互联网等等。
  • 谢谢@Karl-JohanSjögren
  • 但是当我创建一个新的.cs类时,它是这样创建的namespace TechnePaymentApi.Models { public class OpayoPayment { } }在.net core 6.0项目中可以吗?
猜你喜欢
  • 2019-04-30
  • 2017-06-10
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2020-07-11
  • 2022-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多