如何定位 .NET Standard 2.0?

Rob*_*ron 1 .net asp.net-mvc visual-studio-code .net-standard

我正在尝试创建一个面向 .NET Standard 2.0 的新 .NET MVC 应用程序。当我做一个时,dotnet new mvc -au None我最终会得到一个针对aspnetcore2.0. 由于我希望项目定位,因此netstandard2.0我必须手动制作.csproj文件:

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.1" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是当我做某事时dotnet run会往南走:

一个可运行的项目应该针对一个可运行的 TFM(例如,netcoreapp2.0)并具有 OutputType 'Exe'。

相关资料:

dotnet --version
2.1.4
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

小智 5

你应该针对netcoreapp2.0.

解释

.Net Standard 是 .Net 基类库的一个实现,它定义了您可以编程的 API 标准列表。因此,您的项目可以像针对 .Net XX 一样针对 .Net Standard

当你选择了DotNetCore 2.0,你真的选择一个实施的.NET标准的,基于.NET标准2.0消耗类。这些类通常被编译成一个不可执行的类库 (dll)。或者,您可以在基于标准的应用程序项目中构建类的实现。DotNetCore 应用程序是可执行的控制台应用程序

请参阅部分:与 .NET Standard 的关系

  • 正确的。.NET Standard 项目只能用于不可执行的可移植程序集。由于 AspNetCore 程序集是可执行的,因此它们不满足该要求,您必须以 `netcoreapp2.0` 为目标。 (3认同)