如何在新创建的 .NET Core 2.0 Web 应用程序中定位 .NET Standard 2.0?

Posted

技术标签:

【中文标题】如何在新创建的 .NET Core 2.0 Web 应用程序中定位 .NET Standard 2.0?【英文标题】:How do I target .NET Standard 2.0 in a freshly created .NET Core 2.0 web app? 【发布时间】:2017-10-07 14:14:21 【问题描述】:

我刚刚使用dotnet new web 创建了一个新项目。我的 Google-foo 可能让我失望了,但我没有找到任何与我的答案相关的内容(请链接到另一个 SO 答案,或者如果我遗漏了一些明显的东西,请链接到相关文档)。

如果我想确保这个新项目符合 .NET Standard 2.0,我现在该怎么办?

【问题讨论】:

您想更改使用 .Net Core 2.0 创建 Web 应用程序的 .NET Standard 框架吗? 我可能误解了一些东西。我认为 .NET Standard 只是一个“合同”。因此,如果我创建了一个 .NET 4.5 框架,它可能包含仅限 Windows 的引用,例如处理注册表的方法,从而使其不符合 .NET 标准。同样,如果我创建一个 Xamarin 应用程序,它可能包含使其不符合 .NET 标准的 GPS 标准库调用。我的印象是我必须做更多的事情才能将其“锁定”到 .NET Standard 的合同中。 .NET Standard 主要面向平台供应商(如 Unity、Xamarin 和 Mono)和 NuGet 包作者。如果你只是一个最终用户,直接使用目标平台,忘记“兼容性”。 blog.lextudio.com/… .Net Standard 是一组 API,必须由任何 .Net 框架或 .Net 核心实现来实现。这样您就可以拥有任何 .Net 框架或 .Net 核心应用程序可以使用任何 .Net 标准 dll。 ***.com/questions/42939454/… 【参考方案1】:

本质上不可能将netstandard 项目作为可执行文件运行。因为netstandard 是为图书馆设计的。

为了完全在 netstandard2.0 中开发您的 Web 应用程序,您必须创建一个单独的项目,该项目以 .NET Core 或 .NET Framework 为目标,以执行包含您的 Web 应用程序的库(使用 . NET 标准).

1. Executable Project (ex: console app)
   -- Target Framework: netcoreapp2.0 / net462

2. Web Application Project (library)
   -- Target Framework: netstandard2.0

您可以使用以下步骤来更改项目的目标框架。

步骤 1. 定位所需的框架

    右键单击您的项目并选择Edit *****.csproj

    .csproj文件中,需要将目标框架替换为.NET Framework。

.csproj 文件示例:

<Project Sdk="Microsoft.NET.Sdk.Web"> //<-- note the .Web for the web template
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>

有关目标框架名字对象 (TFM)(即net47netstandard2.0netcoreapp2.0 等*)的列表,您可以查看此链接: https://docs.microsoft.com/en-us/dotnet/standard/frameworks

第 2 步。运行dotnet restore

转到您的输出窗口并运行dotnet restore

注意:有时 Visual Studio 可能会出现异常(取决于您安装了哪个更新),因此您可能必须关闭并重新打开 Visual Studio。否则,有时清理/重新构建可能会奏效。


针对两个框架

您可以选择其中一个,甚至可以针对两个框架。

<TargetFrameworks>netcoreapp2.0; net47</TargetFrameworks> //<-- note the plural form!

【讨论】:

netstandardx.y 用于类库。它们通常没有入口点,也不会生成可执行文件。 OP 显然想要创建一个应用程序(这就是 dotnet new web 所做的)。如果他要创建一个类库,他会改用dotnet new classlib @Tseng -- 虽然从技术上讲,您可以创建一个基本的控制台项目并引用一个 netstandard 库,其中包含网络主机的完整代码... dotnet new web 已经创建了一个控制台应用程序,这就是它首先以netcorex.y 为目标的原因。您可以模块化应用程序(在多个 PCL 之间拆分控制器/视图),但主应用程序仍然必须是 netcorex.ynet4xy,这也是您配置依赖注入和 Startup.cs 所在的位置。将整个应用程序制作为 PCL,然后从这个 PCL 进行精简引导是没有意义的,因为新的 csproj 工具允许从同一个项目中针对多个平台(与过去不同) 如果有疑问,请使用您想要的目标创建一个新项目,并将创建的 csproj 文件与您的文件进行比较。这些说明对我很有用,但 MS 似乎永远无法停止改变!【参考方案2】:

NET Standard 用于类库。应用程序必须以 netcoreapp* 为目标,其中 * 是版本号。下面显示了兼容性矩阵:https://docs.microsoft.com/en-us/dotnet/standard/net-standard

例如,.NET Core 2 可以使用 .NET Standard 版本 2 及更低版本。

【讨论】:

以上是关于如何在新创建的 .NET Core 2.0 Web 应用程序中定位 .NET Standard 2.0?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .Net Core 2.0 中使用 ZXing.Net 和 ImageSharp 创建条码图像

ASP.NET Core 2.0 中 Web API 的本地用户帐户存储

AuthorizeAttribute with JWT Token- .NET Core 2.0 中的身份验证

在 .NET Core 2.0 中使用 WCF 服务

在控制器中更改 ASP.NET Core 2.0 标识连接字符串

如何在 .Net Core 2.0 中创建应用程序变量?