我正在借机利用构建系统,配置,从头开始编写所有内容,以获得更深入的了解,并且没有不需要/不需要的不必要的行李.然而,缺乏文档使这很困难..所以我想在这里询问,无疑,聪明的.NET核心人员正在隐藏;)
我知道这个问题很长,有很多小问题.但是我可以通过一个单独的文档链接来感受,或者是有一些人知道的一些succint线.感谢与我的关系,我希望这可能成为一个有用的回答资源为其他人在同一条船,试图了解一个好的方法为.NET核心.
首先,global.json.我想要多个项目和组件在同一个“解决方案”.通过另一个SO问题,我发现这个隐藏的链接:http://dotnet.github.io/docs/project-model/global-json-reference.html – 但似乎没有VS工具从头开始设置或使用它.
1)global.json问题
A)这些文档是指什么构建系统? dotnet构建? (这个帮助说,它只是构建一个项目 – 如果它是“解决方案” – 如果这仍然是名称 – 它是否运行dotnet构建在所有子文件夹?).
B)许多例子都有一个“sdk”属性 – 但是EF Core没有这个属性,而新的“单句式”文档并没有引用它. The official RC2 migration guide for ASP.NET Core has it还在吗?如果是这样,为什么需要它?有什么用有什么选择?
接下来,到project.json和框架.我想了解这里的框架选项.有没有列表?官方指导dotnet新用netcoreapp1.0; “official docs”使用dnxcore50和this GH discussion from last month的示例也提出了netcore1.0作为框架(vs应用程序)的可能性的问题.
此外,进口.令人非常困惑的命名 – 该文档谈到这是项目与之兼容的其他框架的列表.
2)project.json框架问题 –
A)我在哪里可以找到关于框架选项的最新或维护的列表或一组建议?
B)如果我对导入目的的理解是正确的,为什么这样命名?如果没有,究竟进口什么?
C)为什么每个框架属性都有一个import属性?如果要指出整个项目是否与另一个框架兼容,那么似乎最好放在project.json的顶层呢?
D)我该如何决定我应该使用哪些导入选项? dotnet new只有dnxcore50 – 哪些包是满足的? This guy建议dotnet5.6,dnxcore50和portable-net45 win8!
最后,我正在构建类库,测试项目,控制台工具.所以..
3)参考和包
A)我是否一直希望MicrosoftnetCore.App根据dotnet新增?是否有其他基准选项?选择指导?一个列表?
B)文档没有提到关于类型选项(构建,平台)的任何内容.有没有这方面的指导?
C)我的一些项目将使用ASP.NET.在哪里找到正确的包参考的最佳位置在哪里? NuGet上似乎有一百万个版本和软件包. This tutorial只是谈论引用Microsoft.AspNetCore.Server.Kestrel – 和唯一ASP.NETty的事情是Microsoft.AspNetCore.Hosting.这是否意味着一个包是大多数ASP.NET?
解决方法
global.json
> global.json构建系统:global.json(作为project.json)不指定构建系统(除了例如msbuild csproj文件).现在,只有dotnet构建可用(在VS中使用时由msbuild xproj代理).这将改变为msbuild,因为完整的工具是预览/测试版,不会在6月底发布.它遍历所有的子文件夹并构建东西.它也是用于查找本地项目引用的根节点.
> global.json sdk:这是用于构建的sdk.新的cli还支持多个sdks,我认为这仍然用于选择.
project.json
> project.json框架列表:我建议您阅读platform standard document,然后找到当前框架标记的列表.本文还将解决您(可能)拥有的其他许多问题.一个完整的列表是在NuGet project docs,但是列表再次被弃用,也没有那么有用.您的示例netcore指用于UWP(哪个运行时也称为.NET Core),而跨平台.NET Core使用netcoreapp,这在NuGet文档中完全缺失.
> project.json import:你这里的目的是错的.在project.json中,指定构建库的实现的目标框架(例如netstandard1.6和net451). import语句用于您为目标框架指定的依赖关系,并且基本上说:如果TFM(例如netstandard1.6)不存在于引用的库中(因为NuGet在之前构建),我也接受这些导入一次(例如,弃用的dotnet5.6或dnxcore50).这是一个打破NuGet的实用程序,允许使用尚未移动到新TFM的库.它并没有说明你的项目,而是您接受使用哪些版本的依赖项.这需要针对每个目标框架的单独规范,因为NuGet库实现的接受可能会因目标框架而有所不同.
> project.json导入用法:好的,使用你需要的,并删除所有你不需要的.当您将尚未迁移的NuGets引用到新的TFM时,您将收到错误. dnxcore和dotnet在.NET Core项目上保存下注,因为它们已被使用在当前的绰号netstandard和netcoreapp之前.只是不要那么大胆地添加,例如基于net461 / mscorlib的NuGet实现到基于netstandard / System.Runtime的目标框架.这不行,是一个常见的错误.
依赖
> dotnet新的默认模板:是的,对于总是正确选择的ASP.NET和控制台应用程序.然而,这只是一个简单的控制台应用程序(网络应用程序也是控制台应用程序).使用Visual Studio在Linux下创建新的ASP.NET Core项目或yeoman以进行高级模板化. dotnet新不是一个完整的脚手架系统.新模板使用netcoreapp目标框架和Microsoft.NETCore.App元数据包导入基本上所有可用的基类库.如果要创建库,请切换到netstandard目标框架,并依赖于NETStandard.Library.您仍然可以添加其他依赖项.对于ASP.NET核心,没有直接的元包可用.指导在这里结束.有一个称为修剪的过程,您可以在其中删除这些元数据包,并添加具体的依赖关系.但是还没有工具.
> project.json构建/平台依赖:构建依赖关系本质上是在构建期间不发布的工具.当你知道npm你知道这个方案是devDependencies.平台依赖性本质上是一个依赖关系,它不是与您的应用程序一起部署,而是.NET Core SDK的共享基础安装的一部分.您可以在“便携式应用程序”(即平台)和“自包含应用程序”(即没有)中找到guidance.
> 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 Core来说,情况是不同的,因为现在付费的理念非常关键.对于高效应用,您必须了解您添加的内容.作为起步者,您必须使用像VS或yeoman这样的脚手架系统. Microsoft.AspNetCore.Server.Kestrel(例如纯文本)或Microsoft.AspNetCore.Mvc(对于web api)传递性地包括大多数其他关键的ASP.NET Core依赖关系.
免责声明:以上大部分主题都涉及被认为是“预览”的工具. “预览”是指“测试版”.有即将到来的重大变化(如将build.js从project.json切换回msbuild,或再次改进.NET标准).
我希望这能回答大部分的问题.我认为在一个问题中回答所有这些都是一个挑战;).