.NET Core - 解决方案、框架、导入、运行时

2024-05-08

我正在开始重新设计一组框架库以使用 .NET Core。我想我会等待 RC2 并热衷于投入其中。

我借此机会近距离接触构建系统、配置、从头开始编写所有内容,以获得更深入的理解,并且没有我不想要/不需要的不必要的包袱。然而,缺乏文档使得这变得相当困难......所以我想在这里问,聪明的 .NET Core 人员无疑隐藏在哪里;)

我知道这个问题很长并且有很多子问题。但我觉得这个问题可以通过一个文档链接或知情人士的几句话来回答。感谢您对我的包容,我希望这可能成为其他有同样想法的人的有用答案资源,试图了解 .NET Core 的好方法。


First, global.json。我想要同一个“解决方案”中的多个项目和组件。通过另一个SO问题我发现了这个隐藏的链接:http://dotnet.github.io/docs/project-model/global-json-reference.html http://dotnet.github.io/docs/project-model/global-json-reference.html- 但似乎没有 VS 工具用于从头开始设置或使用它。

1)global.json问题

A) 这些文档指的是什么构建系统?dotnet build? (对此的帮助说它只是构建一个项目 - 如果它确实是“解决方案” - 如果这仍然是名称 - 它只是运行dotnet build所有子文件夹?)。

B)周围的许多例子都有一个"sdk"属性 - 但 EF Core 没有它,并且新的“单句样式”文档没有引用它。ASP.NET Core 官方 RC2 迁移指南有它 https://docs.asp.net/en/latest/migration/rc1-to-rc2.html它还在吗?如果是这样,为什么需要它?它有什么用?它有哪些选择?


接下来,到project.json和框架。我想了解这里的框架选项。有清单吗?官方指导?dotnet new uses netcoreapp1.0; “官方文档” http://dotnet.github.io/docs/project-model/project-json-reference.html举个例子dnxcore50 and 上个月的 GH 讨论 https://github.com/aspnet/dnx/issues/3378还提出了一个问题netcore1.0作为框架(相对于应用程序)的可能性。

此外,imports。我对命名感到非常困惑 - 文档讨论这是该项目兼容的其他框架的列表。

2)project.json框架问题 -

A) 我在哪里可以找到关于框架选项的最新或维护的列表或建议集?

B) 如果我理解的目的import是对的,为什么这么命名呢?如果不是,它到底导入了什么?

C) 为什么会有一个import每个人的财产framework财产?如果它表明整个项目与另一个框架兼容,那么似乎最好将其放在project.json, no?

D) 我应该如何决定import我应该使用选项吗?dotnet new刚刚dnxcore50- 满足哪些套餐?This guy https://wildermuth.com/2016/05/17/Converting-an-ASP-NET-Core-RC1-Project-to-RC2建议dotnet5.6, dnxcore50 and portable-net45+win8!


最后,我正在构建类库、测试项目、控制台实用程序。所以..

3)参考文献和包

A) 我总是想要吗Microsoft.NETCore.App as per dotnet new?还有其他基线选项吗?选择指导?一个列表?

B)文档没有提到任何关于type选项 (build, platform)。有关于这些的任何指导吗?

C) 我的一些项目将使用 ASP.NET。哪里是找到正确包以供参考的最佳位置? NuGet 上似乎有一百万个版本和包。本教程 https://docs.asp.net/en/latest/tutorials/your-first-mac-aspnet.html只是谈论参考Microsoft.AspNetCore.Server.Kestrel- 唯一引用的 ASP.NETty 内容是Microsoft.AspNetCore.Hosting。这是否意味着 ASP.NET 的大部分内容都在一个包中?


你有很多问题。没有单独的文档,因为问题并不那么简单;)

全局.json

  • global.json 构建系统:global.json(如project.json)不指定构建系统(除了 msbuild csproj 文件)。目前,仅dotnet build可用(在 VS 中使用时由 msbuild xproj 代理)。这将更改为msbuild因为完整的工具处于预览/测试阶段,不会在六月底发布。它会遍历所有子文件夹并构建内容。它也是查找本地项目引用的根节点。
  • global.json sdk:这是用于构建的sdk。新的cli还支持多个sdk,我think这仍然用于选择。

项目.json

  • 框架的project.json列表:我建议您阅读平台标准文件 https://github.com/dotnet/corefx/blob/master/Documentation/architecture/net-platform-standard.md在那里您可以找到当前框架名称的列表。本文档还将解决您(可能)遇到的许多其他问题。完整列表位于NuGet 项目文档 https://docs.nuget.org/create/targetframeworks,但该列表再次被弃用,而且也没那么有用。你的例子netcorerefer 用于 UWP(其运行时也称为 .NET Core),而跨平台.NET Core uses netcoreappNuGet 文档中完全缺少这一点。
  • project.json import:你的目的是错误的。在project.json中,您指定构建库的实现的目标框架(例如netstandard1.6 and net451). The import语句用于您为目标框架指定的依赖项,基本上表示:如果 TFM(例如netstandard1.6)不存在于引用的库中(因为 NuGet 是不久前构建的),我也接受这些导入一次(例如已弃用的dotnet5.6 or dnxcore50)。目前,这是一个用于破坏 NuGet 并允许使用尚未移至新 TFM 的库的实用程序。它没有说明您的项目的任何信息,而是说明您接受使用哪些版本的依赖项。这需要为每个目标框架制定单独的规范,因为每个目标框架对 NuGet 库实现的接受程度可能有所不同。
  • project.json 导入用法:好吧,使用您需要的内容并删除所有不需要的内容。当您引用尚未迁移到新 TFM 的 NuGet 时,您将收到错误。dnxcore and dotnet可以节省对 .NET Core 项目的押注,因为它们在当前名称之前就已经使用过netstandard and netcoreapp已被创造。只是不要那么大胆地​​添加例如net461/mscorlib 基于 NuGet 实现netstandard基于 /System.Runtime 的目标框架。这是行不通的,而且是一个常见的错误。

依赖关系

  • dotnet 新的默认模板:是的,对于 ASP.NET 和控制台应用程序来说,这始终是正确的选择。然而,这只是一个简单的控制台应用程序(Web 应用程序也是控制台应用程序)。使用 Visual Studio 创建新的 ASP.NET Core 项目或在 Linux 下使用 yeoman 进行高级模板化。dotnet new不是一个完整的脚手架系统。新模板使用netcoreapp目标框架和Microsoft.NETCore.App元包导入基本上所有可用的基类库。如果你想创建一个库,请切换到netstandard目标框架并取决于NETStandard.Library。您仍然可以添加其他依赖项。对于 ASP.NET core,没有直接的元包可用。指导到这里就结束了。有一个称为修剪的过程,您可以在其中删除这些元包并添加具体的依赖项。但目前还没有相应的工具。
  • project.json 构建/平台依赖项:build依赖项本质上是工具,在构建期间不会发布。当你知道npm你知道这个方案是devDependencies. platform依赖项本质上是一个依赖项,它不会与您的应用程序一起部署,而是作为 .NET Core SDK 的共享基础安装的一部分。你发现guidance http://dotnet.github.io/docs/core-concepts/app-types.html这里的术语“便携式应用程序”(即platform)和“独立应用程序”(即没有)。
  • project.json 元包/传递依赖项:.NET Core 和 project.json 引入了元包的概念。Microsoft.NETCore.App本质上是 .NET Core 命令行应用程序的基线依赖项NETStandard.Library对于类库。所有这些包都可以拥有自己的代码和其他包的传递依赖项。这些你也可以利用。举个例子,Microsoft.NETCore.App包指NETStandard.Library这再次提到System.Collections.Generic。所以在你的应用程序中引用Microsoft.NETCore.App您可以使用通用集合。为了ASP.NET 核心情况有所不同,因为现收现付的理念对性能非常关键。对于高效的应用程序,您必须了解您添加的内容。作为初学者,您必须使用 VS 或 yeoman 等脚手架系统。这Microsoft.AspNetCore.Server.Kestrel(例如纯文本)或Microsoft.AspNetCore.Mvc(对于 Web api)传递地包含大多数其他关键 ASP.NET Core 依赖项。

免责声明:上面的大多数主题都与被视为“预览”的工具相关。 “预览”意味着“测试版”。即将发生重大变化(例如将构建系统从 project.json 切换回 msbuild,或再次完善 .NET 标准)。

我希望这能回答您的大部分问题。我认为在一个问题中回答所有这些问题是一项挑战;)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET Core - 解决方案、框架、导入、运行时 的相关文章

随机推荐