无法在这个位置找到: head2.htm
当前位置: 建站首页 > 新闻动态 > 行业新闻 >

一文陪你迅速了解.NET CLI

时间:2021-04-05 07:49来源:未知 作者:jianzhan 点击:
应用 Docker cli 要非常容易很多。InfoQ 的本文是“.NET Core" 系列产品的一一部分。您能够根据 RSS 定阅接受通告。近期总会有人跟我说,和这些要不犹豫,要不不可以撤出老版本、多功能

640?wx_fmt=jpeg

< cli 是 .Net Core 作用中最有效的特点之一。在这里一篇文章里,大家将详细介绍好多个.Net OSS cli,并详细介绍怎样在平时开发设计中应用新的 cli 专用工具。

< cli 促使根据. Net 新项目的全自动化和脚本制作撰写越来越十分简易,特别是在是与十很多年前的. Net 技术性对比。

< cli 扩展性实体模型造就了标准,促使根据 Nuget 将外界.NET 撰写的指令行程安排序集成化到你的全自动化搭建中变成将会。

< cli 容许在你的搭建脚本制作中对于处理计划方案开展检测。

< cli 的检测輸出有利于于更强地应用不断集成化 (CI)。

应用 Docker cli 要非常容易很多。

InfoQ 的本文是“.NET Core" 系列产品的一一部分。您能够根据 RSS 定阅接受通告。

近期总会有人跟我说,和这些要不犹豫,要不不可以撤出老版本、多功能的.NET 的人对比,挑选.NET Core 的优点是啥?我还在回应时会提及.NET Core 有更强的特性、改善的 csproj 文档文件格式、改善的 ASP 可检测性,而且它是混合开发的。

做为好多个 OSS 专用工具 (Marten、StructureMap,及其在这里个新项目中做为事例被引入的Alba) cli的出現。我本人觉得,融合新的.NET SDK cli 专用工具使我能更非常容易建立新项目和维护保养搭建脚本制作。我能更非常容易在搭建脚本制作中运作检测,更非常容易应用和派发 Nuget 包,cli 扩展性体制十分合适将根据 Nuget 包派发的自定exe文件合拼到全自动搭建中。

cli,最先要在开发设计设备上安裝.NET SDK。安裝进行后,让你一些有效的提醒:

”专用工具全局性安裝到你的 PATH 中,那样在一切地区都可以以根据指令行提醒符应用它。

< cli 选用 Linux 设计风格的指令英语的语法,用“–word [value]”这类一般书写表明挑选的主要参数,或是立即用简称方式“-w [value]”。假如您习惯性 Git 或 Node.js 指令行专用工具, cli 觉得生疏。

“dotnet --help”将列举已安裝的指令和一些基本英语的语法使用方法。

“dotnet --info” cli。在不断集成化搭建中启用此指令将会是一个好点子,便于在当地工作中并在搭建网络服务器不成功时清除常见故障,相反亦然。

虽然我还在文中中探讨的是.NET Core,可是一定要注意,你可以以在详细.NET 架构的之前版本号中应用新的 SDK cli。

指令行中的 Hello World

cli 的一些闪光点,要我们假定想搭建一个简易的“Hello World”ASP.NET Core 运用程序。但是,以便好玩儿,大家来加上一些新花式:

1. 大家的 web 服务将在一个独立的新项目中开展全自动化检测。

2. 大家将根据 Docker 器皿布署大家的服务,由于它是很帅的作法 ( cli)。

3. 自然, cli。

假如您爱看到这一段编码的最后結果,请查询this GitHub repository。

最先,要我们从一个名叫“DotNetCliArticle”的空文件目录刚开始,并开启您最喜爱的指令行专用工具到该文件目录。 new”指令来转化成处理计划方案文档和最新项目刚开始。.NET SDK 附加了好多个用以建立普遍新项目种类或文档的通用性模版,及其别的可做为外接程序应用的模版 (稍后一部分将对于此事开展详尽详细介绍)。要查询在你的设备上能用的模版, new -help,它应当会得出以下輸出:

640?wx_fmt=png

你可以能会注意到有一个 sln 模版,它对于的是空处理计划方案文档。大家将应用该模版, new sln 指令,该指令将转化成下列輸出:


The template "Solution File" was essfully.

默认设置状况下,此指令将以包括的文件目录取名处理计划方案文档。由于我将网站根目录取名为为“DotNetCliArticle”,因此转化成的处理计划方案文档是“DotNetCliArticle.sln”。

接下去,要我们用于下指令加上“Hello,World”的具体新项目:


< new webapi --output HeyWorld

上边的指令含意是将“webapi”模版采用根据“output”主要参数挑选的“HeyWorld”中。这一模版将转化成一个精减的 MVC Core 新项目构造,合适于无头 API。一样,默认设置的作法是依据所属的文件目录取名新项目文档,因而大家在文件目录下获得一个名叫“HeyWorld.csproj”的文档,及其全部基文中件,构成一个最少的 ASP.NET MVC Core API 新项目。该模版还设定了全部必需的 Nuget 对 ASP.NET Core 的引入,大家在最新项目起动时候采用他们。

因为刚刚好在一个中小型 Git 储存库文件搭建了它,在应用 Git add 加上了一切新文档以后,我应用 Git status 查询初创建的文档:


new file: HeyWorld/Controllers/ValuesController.cs

new file: HeyWorld/HeyWorld.csproj

new file: HeyWorld/Program.cs

new file: HeyWorld/Startup.cs

new file: HeyWorld/appsettings.Development.json

new file: HeyWorld/appsettings.json

如今,要将最新项目加上到大家的空处理计划方案文档中, sln”指令:


< sln DotNetCliArticle.sln add HeyWorld/HeyWorld.csproj

如今大家拥有一个新的 ASP.NET Core API 服务做为机壳,不用开启 Visual Studio.NET(或是是 JetBrains Rider)。以便更进一步,在撰写一切具体编码以前起动大家的检测新项目,发了出下列指令:


< new xunit --output HeyWorld.Tests

< sln DotNetCliArticle.sln add HeyWorld.Tests/HeyWorld.Tests.csproj

上边的指令应用 xUnit.NET 建立一个最新项目,并将该最新项目加上到大家的处理计划方案文档中。检测工程项目必须对“HeyWorld”的工程项目引入,好运的是, add”专用工具加上工程项目引入,以下所显示:


< add HeyWorld.Tests/HeyWorld.Tests.csproj reference HeyWorld/HeyWorld.csproj

在开启处理计划方案以前,我明白也有一些 Nuget 参照材料,我觉得在检测新项目中应用他们。我挑选的肯定专用工具是Shoully,因而我将根据对指令行传出另外一个启用来加上对全新版本号的 shoully 的引入:


< add HeyWorld.Tests/HeyWorld.Tests.csproj package Shouldly

指令行的輸出以下:


info : Adding PackageReference for package 'Shouldly' into project 'HeyWorld.Tests/HeyWorld.Tests.csproj'.

log : Restoring packages for /Users/jeremydmiller/code/DotNetCliArticle/HeyWorld.Tests/HeyWorld.Tests.csproj...

info : GET v3-flatcontainer/shouldly/index.json

info : OK v3-flatcontainer/shouldly/index.json 109ms

info : Package 'Shouldly' is compatible with all the specified frameworks in project 'HeyWorld.Tests/HeyWorld.Tests.csproj'.

info : PackageReference for package 'Shouldly' version '3.0.0' added to file '/Users/jeremydmiller/code/DotNetCliArticle/HeyWorld.Tests/HeyWorld.Tests.csproj'.

接下去,我觉得向名叫 Alba 的检测新项目加上最少一个 Nuget 引入。我将应用AspNetCore2来撰写对于新的 web 运用程序的 HTTP 契约书检测:


< add HeyWorld.Tests/HeyWorld.Tests.csproj package Alba.AspNetCore2

如今,在应用编码以前先查验一下,我将在指令行传出下列指令搭建处理计划方案中的全部新项目,保证他们都可以以一切正常编译程序:


< build DotNetCliArticle.sln

因为 Alba.AspNetCore2 和 ASP.NET Core Nuget 在 HeyWorld 新项目中的引入中间的棱形依靠版本号的矛盾,因此沒有编译程序。但是无需担忧,由于这一难题非常容易处理,只需修补 Microsoft.AspNetCore 的版本号依靠关联就可以。检测新项目中的全部 Nuget 全是那样的:


< add HeyWorld.Tests/HeyWorld.Tests.csproj package Microsoft.AspNetCore.All --version 2.1.2

在上边的实例中,应用数值“2.1.2”的“–version”标示将修补对该版本号的引入,而不但仅是应用从 Nuget 摘要中寻找的全新版本号。

以便再度查验大家的 Nuget 依靠难题是不是早已处理,大家可使用下边的指令开展查验,它比例新编译程序全部物品要迅速:


<  restore DotNetCliArticle.sln

做为一个有工作经验的.NET 开发设计工作人员,我十分担忧临时性 /obj 和 /bin 文档夹中残余的文档。因而,我还在 Visual Studio 中应用“Clean Solution”指令,防止我尝试更改引入的情况下落下来些甚么。 clean”指令是彻底同样的实际操作。

一样,对于大家都知道的 Nuget 依靠难题,“dotnet restore”指令在处理计划方案上都尝试去处理了。在这里种状况下, restore”可让大家迅速发觉一切潜伏的矛盾或遗失的 Nuget 引入,而不用开展详细的编译程序,我还在自身的工作中中关键就选用该指令。 cli 中, build/test/pack/etc”时,会全自动为您进行 Nuget 分析 (该个人行为能够用标识遮盖),这将最先必须 Nuget。

restore DotNetCliArticle.sln”整洁爽利地运作结束,沒有不正确,因此大家总算能够提前准备撰写一些编码了。要我们开启您挑选的 C# 编写器,向 HeyWorld 加上一个编码文档。检测新项目包括一个十分简易的 HTTP 协议书检测,它将特定大家期待重新的 HeyWorld 运用程序中的“GET: /”路由器得到的个人行为:


using System.Threading.Tasks;

using Alba;

using Xunit;

namespace HeyWorld.Tests

{

public class verify_the_endpoint

{

[Fact]

public async Task check_it_out()

{

using (var system = SystemUnderTest.ForStartup Startup ())

{

await system.Scenario(s =

{

s.Get.Url("/");

s.ContentShouldBe("Hey, world.");

s.ContentTypeShouldBe("text/plain; charset=utf-8");

});

}

}

}

}

結果文档应当储存在具备适度名字 (如 verify_the_endpoints.cs) 的 HeyWorld.Tests 文件目录。

在沒有深层次掌握 Alba 体制前,大家的新 HeyWorld 运用的路由器应当写成“Hey, world”。尽管大家还没有有在 HeyWorld 运用中撰写一切具体的编码,可是大家依然能够运作这一检测,看一下它可以联接恰当,還是由于一些“理所应当的原因”而不成功。

返回指令行,我能应用下列指令运作检测新项目中的全部检测:


< test HeyWorld.Tests/HeyWorld.Tests.csproj

大家的一个检测会不成功,由于还没有有完成一切物品,它给了大家那样的輸出:


Build started, please wait...

Test run for /Users/jeremydmiller/code/DotNetCliArticle/HeyWorld.Tests/coreapp2.1/HeyWorld.Tests.dll(.NETCoreApp,Version=v2.1)

Microsoft (R) Test Execution Command Line Tool Version 15.7.0

Copyright (c) Microsoft Corporation. All rights reserved.

Starting test execution, please wait...

Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.

Test essful.

Test execution time: 2.4565 Seconds

以便把輸出求饶,实行了一个检测,可是不成功了。大家还能够见到规范的 xUnit 輸出,它出示了一些有关检测不成功缘故的信息内容。这儿必须留意的是,“dotnet test”指令将回到一个撤出编码,假如全部检测都根据,则回到 0,表明取得成功;假如一切检测不成功,则回到一个非零撤出编码,表明不成功。这针对不断集成化 (CI) 脚本制作十分关键,大多数数 CI 专用工具应用一切指令的撤出编码来明确搭建什么时候不成功。

我觉得上边的检测往往不成功是由于“理所应当的缘故”,这寓意着检测专用工具好像可以正确引导真实的运用程序,希望获得 404 响应,由于还没有有撰写一切编码。接下去,要我们为预估的个人行为完成一个 MVC Core 节点:


public class HomeController : Controller

{

[HttpGet("/")]

public string SayHey()

{

return "Hey, world!";

}

}

(留意,前边的编码应当做为 HeyWorld\startup.cs 文档中的额外类加上)

再度返回指令行, test HeyWorld.Tests/HeyWorld.Tests.csproj”指令,期待见到那样的結果:


Build started, please wait...

Test run for /Users/jeremydmiller/code/DotNetCliArticle/HeyWorld.Tests/coreapp2.1/HeyWorld.Tests.dll(.NETCoreApp,Version=v2.1)

Microsoft (R) Test Execution Command Line Tool Version 15.7.0

Copyright (c) Microsoft Corporation. All rights reserved.

Starting test execution, please wait...

Total tests: 1. Passed: 1. Failed: 0. Skipped: 0.

Test essful.

Test execution time: 2.4565 Seconds

好啦,如今检测根据了,要我们运作具体的运用程序。 new webapi”模版应用过程内的 in-process Kestrel web server 来解决 HTTP 恳求,因此要运作新的 HeyWorld 运用程序,大家唯一必须做的一件事便是从指令履行用于下指令起动它:


 dotnet run --project HeyWorld/HeyWorld.csproj

运作上边的指令应当会获得以下輸出:


Using launch settings from HeyWorld/Properties/launchSettings.json...

: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]

User profile is available. Using '/Users/jeremydmiller/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.

Hosting environment: Development

Content root path: /Users/jeremydmiller/code/DotNetCliArticle/HeyWorld

Now listening on: p>

Now listening on: p>

Application started. Press Ctrl+C to shut down.

要检测大家如今已经运作的新运用程序,只需在访问器中导航栏以下:

640?wx_fmt=jpeg

解决 HTTPS 设定超过了文中的范畴。

请再度留意,我假定全部指令全是在将当今文件目录设定为处理计划方案根文档夹的状况下实行的。假如当今文件目录是一个新项目文件目录,而且仅有一个 *.csproj。那麼, run”就可以。如今大家早已拥有一个历经检测的 web api 运用程序,接下去要我们将 HeyWorld 放进 Docker 镜像系统中。应用 the standard template for dockerizing a .NET Core application,大家将向 HeyWorld 新项目加上一个 Dockerfile,內容以下:


FROM :sdk AS build-env

WORKDIR /app

Copy csproj and restore as distinct layers

COPY *.csproj ./

restore

Copy everything else and build

COPY . ./

publish -c Release -o out

Build runtime image

WORKDIR /app

COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "HeyWorld.dll"]

(留意,前边的文字应当储存到新项目文件目录中名叫 Dockerfile 的文字文档中——在本例中是 HeyWorld\Dockerfile)。

cli 的,我只为关心 Dockerfile 中它的二种使用方法:

1.“dotnet restore”–如同大家在上边学得的,这一指令将处理运用程序的一切 Nuget 依靠关联。

2.“dotnet publish -c Release -o out”–“dotnet publish”指令将搭建特定的新项目,并将构成运用程序的全部文档拷贝到给精准定位置。在大家的事例中,“dotnet publish”将为 HeyWorld 自身拷贝已编译程序的程序集、从 Nuget 依靠项引入的全部程序集、配备文档及其 csproj 文档中引入的一切文档。

一定要注意,在上边的使用方法中,大家务必根据应用“-c Release” publish”用“Release”配备编译程序。 cli 指令 (比如“build”、“publish”、“pack”)假如沒有特定,将以 “Debug”为默认设置值。留意这类个人行为,假如要公布用以生产制造的 Nuget 或运用程序,请记牢特定“-c Release”或“-configuration Release”。别怪我没提示你。

以便进行全部周期时间,大家如今可使用于下指令根据 Docker 搭建和布署大家的小 HeyWorld 运用程序:


docker build -t heyworld .

docker run -d -p 8080:80 --name myapp heyworld

第一个指令为大家的运用程序“heyworld”搭建并当地公布 Docker 镜像系统。第二个指令具体中作为一个名叫“myapp”的 Docker 器皿运作大家的运用程序。您能够开启访问器浏览“p> < cli 促使根据. NET 新项目的全自动化和脚本制作撰写越来越十分简易,特别是在是与十很多年前的.NET 技术性对比。在很多状况下,您乃至将会会绕开一切根据每日任务的搭建脚本制作专用工具 (Cake、Fake、Rake、Psake 等), cli 的简易 shell 脚本制作。 cli 扩展性实体模型能够非常容易地将外界.NET 受权的指令行运用程序根据 Nuget 遍布到全自动搭建程序中。

杰里米·米勒 (Jeremy Miller)在密苏里州一个大农场小区长大了,那边有一群“非常”的人,全名是“树荫技术工”。一般,她们并不是全球上最知名望的人,但她们有处理机械设备难题的技巧,并且办事莽撞无所畏惧。假如你发觉从一辆停在商业街的出行车下外伸来两根腿,那他想来便是名维修工了,他的周边是一些框架车,堆挤在他那长满灌木、放满废弃物的庭院里。你看看到的被抛弃在他周边的打浆机其实不是不起作用的,她们是素材图片。他会零零碎碎地开展些小调节,随后依据你的必须想到一个造就性的处理计划方案。虽然知名度一般,但一个树荫技术工了解怎样让物品运作。尽管米勒沒有一切独特的机械设备工作能力 (虽然他有着机械设备工程项目学士学位),但他喜爱把自身当做一个像树荫技术工一样开发设计工作人员。他的电脑硬盘上毫无疑问四处全是废料的开源系统新项目残片。



640?wx_fmt=jpeg

有关阅读文章

云计算技术具备水准延展性的特点,es中的POD群集来讲,HPA便是完成这类水准伸缩式

CVPR2018_主杆互联网系列产品(3)_SE-Net以及衍化的互联网[SE-X

  

为何我不会再用 .NET 架构

.NET服务平台非常好。确实非常好。直至它已不那麼棒。我来甚么已不用.NET?简易来讲,它限定了大家挑选的工作能力(一件事来讲太重要),迁移了大家的注

VNET基本原理与完成(1)

神经系统互联网甚么的早已并不是新定义了,但是学了那么久,还一直在二维图象上打转,因此今日刚开始下手三维图象切分,先从讨人喜欢的VNET刚开始吧,从胖嘟

net use应用方式

< use \\ip\ipc$ "password" /user:" user username password /add改动客户密

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
无法在这个位置找到: ajaxfeedback.htm
栏目列表
推荐内容


扫描二维码分享到微信