如何在新创建的.NET Core 2.0 Web应用程序中针对.NET Standard 2.0进行目标设置?

18
我刚使用 dotnet new web 创建了一个新项目。我的搜索可能有些失败,但我没有找到任何与我的答案相关的内容(如果我错过了明显的东西,请链接到另一个 SO 答案或相关文档)。
如果我想确保这个新项目符合 .NET Standard 2.0 标准,我现在该怎么做?

你想要更改使用 .Net Core 2.0 创建 Web 应用程序的 .NET Standard 框架吗? - Santhakumar Munuswamy
我可能误解了一些东西。我认为.NET Standard只是一个“契约”。因此,如果我创建了一个.NET 4.5 Framework,它可以包含仅适用于Windows的引用,例如处理注册表的方法,从而使其不符合.NET Standard标准。同样,如果我创建了一个Xamarin应用程序,它可能包含GPS标准库调用,使其不符合.NET Standard标准。我印象中需要做更多的事情来“锁定”到.NET Standard的契约中。 - Geesh_SO
.NET Standard主要面向平台供应商(如Unity、Xamarin和Mono)和NuGet包作者。如果您只是最终用户,请直接使用目标平台,不必考虑“兼容性”。https://blog.lextudio.com/which-class-library-project-to-go-in-visual-studio-2015-2017-a48710cf3dff - Lex Li
.Net Standard是一组API,必须由任何.Net框架或.Net核心实现来实现。这样,您可以让任何.Net框架或.Net核心应用程序使用任何.Net标准dll。 - jetstream96
https://dev59.com/u1gQ5IYBdhLWcg3wUiZS - jetstream96
显示剩余3条评论
2个回答

17

将一个netstandard项目作为可执行文件来运行在本质上是不可能的,因为netstandard的设计初衷是用于库。

如果要完全使用netstandard2.0开发您的Web应用程序,您需要创建一个单独的项目,以针对.NET Core或.NET Framework执行包含您的Web应用程序库(使用.NET Standard开发)的操作。

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

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

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

步骤1:定位所需的框架

  1. 右键单击项目,选择 Edit *****.csproj

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

示例.csproj文件:

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

要查看Target Framework Moniker(TFM)(例如net47netstandard2.0netcoreapp2.0等)的列表,您可以查看此链接:https://learn.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 适用于类库。它们通常没有入口点,也不生成可执行文件。显然,原帖作者想要创建一个应用程序(这就是 dotnet new web 的用途)。如果他要创建一个类库,那么他应该使用 dotnet new classlib - Tseng
@Tseng - 虽然你可以在控制台项目中创建一个基本的项目,并引用一个包含Web主机整个代码的netstandard库... - Svek
dotnet new web 已经创建了一个控制台应用程序,这就是为什么它首先针对 netcorex.y。您可以将应用程序模块化(在多个 PCL 之间拆分控制器/视图),但主要应用程序仍必须是 netcorex.ynet4xy,这也是您配置依赖注入和 Startup.cs 所在的位置。将整个应用程序作为 PCL,然后从此 PCL 进行轻量级引导几乎没有意义,因为新的 csproj 工具允许从同一项目中针对多个平台进行目标设置(与过去不同)。 - Tseng
如果有疑问,可以创建一个新项目并针对您想要的目标进行比较,将创建的csproj文件与您的进行比较。这些说明对我非常有效,但微软似乎永远无法停止更改事物! - Simon_Weaver

13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接