如何以 .NET Standard 2.0 为目标?

How to target .NET Standard 2.0?

我正在尝试创建一个面向 .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>

一切都构建得很好,但是当我做一个 dotnet run 事情时,事情就变糟了:

A runnable project should target a runnable TFM (for instance, netcoreapp2.0) and have OutputType 'Exe'.

相关信息:

dotnet --version
2.1.4

我在这里错过了什么?

您应该定位 netcoreapp2.0

说明

.Net Standard 是 .Net Base Class 库的一个实现,它定义了一个标准的 API 列表,您可以根据这些列表进行编程。因此,您的项目可以像面向 .Net X.X 一样面向 .Net Standard。

当您选择 DotNetCore 2.0 时,您实际上是在选择消耗 classes 的 .net 标准的 实现 基于 .net 标准 2.0。这些 classes 通常被编译成不可执行的 class 库 (dll)。或者,您可以在基于标准的应用程序项目中构建 classes 的实现。 DotNetCore 应用程序是 可执行 的控制台应用程序。

参见部分:Relationship to .NET Standard