【问题标题】:How to target .NET Standard 2.0?如何定位 .NET Standard 2.0?
【发布时间】:2018-02-06 04:59:41
【问题描述】:

我正在尝试创建一个面向 .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 时,事情就往南了:

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

相关信息:

dotnet --version
2.1.4

我在这里错过了什么?

【问题讨论】:

    标签: .net asp.net-mvc visual-studio-code .net-standard


    【解决方案1】:

    你应该定位netcoreapp2.0

    说明

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

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

    查看部分:Relationship to .NET Standard

    【讨论】:

    • 如果我没看错的话,不是所有类型的项目都可以定位netstandard2.0 吗?例如。 ASP.NET Core 项目必须以aspnetcore2.0为目标,而类库项目可以以netstandard2.0为目标?
    • 正确。 .NET Standard 项目只能用于不可执行的可移植程序集。由于 AspNetCore 程序集是可执行的,因此它们不满足该要求,您必须以 netcoreapp2.0 为目标。
    • @NightOwl888:感谢您的反馈。附带说明:是我还是这个事实在所有各种文件中都没有得到适当的强调?我的意思是,我看过 Immo 的视频,听过他在播客上的讲话,阅读文章,看到了巨大的兼容性矩阵,但我从未想到/引起我的注意,.NET Standard 本身仅适用于不可执行的程序集。
    • @Robotron - 也许你是对的,我没太注意。我们中的一些人已经使用 .NET Standard 一年多了,而另一些人现在只是将脚趾浸入水中。如果您查看.NET Standard chart - .NET Standard 在平台之间共享库,则此行为是有意义的,但可执行文件只能针对单个平台。但是,我不得不承认,我曾多次在 NUnit 项目中针对 .NET Standard 被抓获,并试图找出问题所在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多