.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高,很有必要写个深入浅出的系列文章,本节内容帮助你入门。我将可能用Windows做开发环境,也可能用Linux/Mac,但是所有的dotnet CLI命令都是跨平台的,我们在windows/Linux/mac平台上开发跨平台的应用。
安装.NET Core
.NET Core 包括.NET Core Runtime 和 .NET Core SDK:
- .NET Core = 应用运行依赖的 .NET Core Runtime
- .NET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI(Software Development Kit/Command Line Interface) 工具
下载地址请到dotnet官方网站dot.net (dot dot net),非常的好记,这个网站也是你入门学.NET Core的入口网站,记住这是个必须要去网站。.NET Core 下载的具体地址:https://www.microsoft.com/net/download#core,这里还列出了注意事项:
- 虽然.NET Core Runtime 和基础库已经1.0 RTM,但是开发工具链(.NET Core CLI,Visual studio 和Visual Studio Code) 还是预览版,具体可以参看https://blogs.msdn.microsoft.com/dotnet/2016/05/06/net-core-rc2-improvements-schedule-and-roadmap/
- 在Windows Servers上部署应用 ,可以单独安装ASP.NET Core Module for IIS 而不需要安装.NET Core runtime,可以通过命令行DotNetCore.1.0.0-WindowsHosting.exe OPT_INSTALL_REDIST=0
- Mac 系统的最低要求是macOS 10.11 (El Capitan)
- .NET Core 在Red Hat 系列服务器上支持的要 RHEL 7 Server,包括CentOS 7 以上,具体参看 https://access.redhat.com/documentation/en/dot-net-core/
- .NET Core 在Ubuntu上面的支持 需要 Ubuntu 14.04 LTS 和 Ubuntu 16.04 LTS
- 如果之前安装了.NET Core的beta,rc1,rc2的版本,在安装之前需要把他们卸载掉,具体参见 stack overflow 的文章。
.NET Core 的具体安装方法可以参看文章 .Net Core 系列:1、环境搭建。
dotnet Command Line Interface(CLI)
.NET Core 的dotnet 命令行接口(CLI)非常重要,是我们开发,运营都要使用的一套工具,Microsoft 为我们提供了这个命令行工具以供我们在开发程序中使用,它主要用来进行对代码的编译、NuGet 包的管理、程序的运行、测试等等。简单的说 :当一个新人坐在座位上开始学习node, python, ruby, golang 或者其它任何东西时,对于绝大多数人来说,按照他们的经验就应该如此。使用.NET应当被看做是一件简单的不能再简单的事了。学习并且使用.NET 的伙伴们有着在Go或者Ruby上有相同的经验。这篇文章 .NET Core dotnet 命令大全 介绍了命令行的使用方法,dotnet run 命令介绍 更详细的介绍了dotnet run命令。练习例子可以用文章 通过几个Hello World感受.NET Core全新的开发体验 。
我们就来通过一个Hello World例子来学习下dotnet 命令行,我们安装好.NET Core 1.0,就可以做下面的事情了:
>dotnet new
>dotnet restore
>dotnet run
想象着和我一块儿,当你把这个和在Mac, Windows, Linux上运行的 Visual Studio代码相比较时,那么你已经获得了一个非常精彩的故事。可以很容易的在很多地方运行开源的.NET 代码。
下面是一段比较长的的代码,创建一个控制台应用,只要在顶部输入“dotnet”,就可以得到很多能用的东西。
[root@Mono helloworld]# dotnet
Microsoft .NET Core Shared Framework Host
Version : 1.0.1
Build : cee57bf6c981237d80aa1631cfe83cb9ba329f12
Usage: dotnet [common-options] [[options] path-to-application]
Common Options:
--help Display .NET Core Shared Framework Host help.
--version Display .NET Core Shared Framework Host version.
Options:
--fx-version <version> Version of the installed Shared Framework to use to run the application.
--additionalprobingpath <path> Path containing probing policy and assemblies to probe for.
Path to Application:
The path to a .NET Core managed application, dll or exe file to execute.
If you are debugging the Shared Framework Host, set 'COREHOST_TRACE' to '1' in your environment.
To get started on developing applications for .NET Core, install .NET SDK from:
http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
[root@Mono ~]# mkdir helloworld
[root@Mono ~]# cd helloworld
[root@Mono helloworld]# dotnet new
Created new C# project in /root/helloworld.
[root@Mono helloworld]# ls
Program.cs project.json
[root@Mono helloworld]# vi Program.cs
[root@Mono helloworld]# dotnet restore
log : Restoring packages for /root/helloworld/project.json...
log : Writing lock file to disk. Path: /root/helloworld/project.lock.json
log : /root/helloworld/project.json
log : Restore completed in 2277ms.
[root@Mono helloworld]# dotnet run
Project helloworld (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling helloworld for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.0002808
Hello World!
[root@Mono helloworld]#
通过上面这几个基本命令就把我们的.NET Core 应用运行起来了。
dotnet new
new 命令用于创建.NET项目或者是应用
[root@Mono ~]# dotnet new --help
.NET Initializer
Usage: dotnet new [options]
Options:
-h|--help Show help information
-l|--lang <LANGUAGE> Language of project [C#|F#]
-t|--type <TYPE> Type of project
可以用这个命令创建几个不同类型的的应用类型,支持C#和F#,C#语言支持的项目类型如下:
- Console
- Web
- Library
- xUnit Test
dotnet restore
restore命令使用NuGet还原在项目文件project.json 中定义的依赖关系和项目特定的工具。
[root@Mono ~]# dotnet restore --help
Usage: nuget3 restore [arguments] [options]
Arguments:
[root] List of projects and project folders to restore. Each value can be: a path to a project.json or global.json file, or a folder to recursively search fo r project.json files.
Options:
-h|--help Show help information
--force-english-output Forces the application to run using an invariant, English-based culture.
-s|--source <source> Specifies a NuGet package source to use during the restore.
--packages <packagesDirectory> Directory to install packages in.
--disable-parallel Disables restoring multiple projects in parallel.
-f|--fallbacksource <FEED> A list of packages sources to use as a fallback.
--configfile <file> The NuGet configuration file to use.
--no-cache Do not cache packages and http requests.
--infer-runtimes Temporary option to allow NuGet to infer RIDs for legacy repositories
-v|--verbosity <verbosity> The verbosity of logging to use. Allowed values: Debug, Verbose, Information, Minimal, Warning, Error.
--ignore-failed-sources Only warning failed sources if there are packages meeting version requirement
[root@Mono ~]#
正如你可以看到从"用法:"上面的一行,还原命令只调用到 nuget3 可执行程序,通常您不需要修改这些选项,如果您使用的自定义软件包源,要么因为您正在使用预发布版本的 Microsoft 库或您的组织使用其自己的软件包源,您可能需要指定使用-s 参数的软件包源。
运行 dotnet 还原生成一个锁文件 (project.json.lock),其中包括有关所有被恢复的软件包的详细的信息。
dotnet build
build命令会把项目和他所依赖的项目编译成一个二进制文件,默认情况下二进制文件是Intermediate Language (IL) 和.dll 为文件扩展名。编译过程依赖于已经存在锁文件(project.json.lock),这是restore命令生成的。
为了生成一个可执行的应用程序,您需要确保该项目配置的编译选项设置应用的入口点︰
"buildOptions": {
"emitEntryPoint": true
},
运行命令可以看到使用方法:
> dotnet build --help
.NET Builder
Usage: dotnet build [arguments] [options]
Arguments:
<PROJECT> The project to compile, defaults to the current directory. Can be one or multiple paths to project.json, project directory or globbing patter that matches project.json files
Options:
-h|--help Show help information
-o|--output <OUTPUT_DIR> Directory in which to place outputs
-b|--build-base-path <OUTPUT_DIR> Directory in which to place temporary outputs
-f|--framework <FRAMEWORK> Compile a specific framework
-r|--runtime <RUNTIME_IDENTIFIER> Produce runtime-specific assets for the specified runtime
-c|--configuration <CONFIGURATION> Configuration under which to build
--version-suffix <VERSION_SUFFIX> Defines what `*` should be replaced with in version field in project.json
--build-profile Set this flag to print the incremental safety checks that prevent incremental compilation
--no-incremental Set this flag to turn off incremental build
--no-dependencies Set this flag to ignore project to project references and only build the root project
你可以使用-f 选项来指定你想要编译为一个特定框架。这一框架必须在项目文件中定义。-C 选项允许您指定要使用的配置。它将默认为Debug,但您可以指定为Release。
dotnet run
大多数情况下,你都是跳过上面的restore,build,直接使用dotnet run命令来运行程序,无论是否修改了应用程序,都是重新编译生成应用并运行。
> dotnet run --help
.NET Run Command
Usage: dotnet run [options] [[--] <arg>...]]
Options:
-h|--help Show help information
-f|--framework Compile a specific framework
-c|--configuration Configuration under which to build
-p|--project The path to the project to run (defaults to the current directory). Can be a path to a project.json or a project directory
dotnet run 命令介绍 更详细的介绍了dotnet run命令
-f, --framework
使用提供的 framework 来运行,这个 framework 就是对应project.json
文件中的 frameworks 节点
-c, --configuration [Debug|Release]
配置使用的环境是 Debug 还是 Release,默认为 Debug 模式。
-p, --project [PATH]
指定要运行的项目,它可以是project.json
的文件路径,可以是包含project.json
的路径,如果没有指定,默认是当前路径。
dotnet [assemblyname]
可以用dotnet命令运行已经编译好的应用,把应用路径作为参数传递给dotnet命令
> dotnet .\bin\Debug\netcoreapp1.0\helloworld.dll
Hello World!
dotnet pack
pack命令编译项目并生成NuGet包,该操作会生成两个NuGet程序包:
- 一个包括已编译代码的程序集文件
- 一个包括调试符号和已编译代码的程序集文件
项目依赖的NuGet项目添加到生成nuspec文件中,默认情况不打包项目之间的引用关系,但可以通过更改项目的相关性类型。
dotnet publish
发布命令会编译应用程序并读取项目文件,然后将结果集的文件发布到一个目录。生成目录的内容将取决于项目的类型,但可以包括一个跨平台的 IL 应用程序和他依赖项,这就是通常用的Portable部署方式,应用程序共享.NET Core运行时环境与程序集依赖,部署的目标机器上需要事先安装.NET Core SDK,然后用dotnet命令运行程序。或者是每个本机平台的子文件夹或自包含的应用程序,其中包括目标平台的运行时,这就是Self-contained部署方式。Self-contained部署方式就是每个应用程序自带.NET Core运行时环境与程序集依赖,部署的目标机器不需要安装.NET Core SDK,将应用程序文件夹拷贝过来就能运行。具体参考文档参考文档 .NET Core Application Deployment
默认的project.json编译出来的应用没有包括跨平台,需要修改project.json文件,需要在 project.json 加入 runtimes 节点 注释掉 "type": "platform"。
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {"hwapp":"1.0.0"},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0"
}
},
"imports": "dnxcore50"
}
},
"runtimes":{
"win7-x64": { },
"win7-x86": { },
"osx.10.10-x64": { },
"osx.10.11-x64": { },
"ubuntu.14.04-x64":{ },
"centos.7-x64":{}
}
}
首先我们要dotnet restore,这里我还原的时候有些久,大家耐心等待一下,因为我们设置4个平台。
dotnet publish -r centos.7-x64
这个生成部署文件的操作是可以跨平台的,在Windows上通过 dotnet publish -r centos.7-x64 命令生成Linux的部署文件,然后将整个部署文件夹上传到Linux服务器。
dotnet test
测试命令用来运行测试项目,使用配置的测试运行程序中定义的测试套件。你会了解更多有关此命令在本教程的后面的章节里了解更详细的内容。
下次我们将深入了解一下到 project.json 文件,并开始尝试在如何构建更复杂的应用程序与新的.Net Core。
.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门的更多相关文章
- NET Core 环境搭建和命令行CLI入门
NET Core 环境搭建和命令行CLI入门 2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文 ...
- NET Core 环境搭建和命令行CLI入门[转]
NET Core 环境搭建和命令行CLI入门 时间:2016-07-06 01:48:19 阅读:258 评论:0 收藏:0 [点我收藏+] 标签: N ...
- .Net Core 系列:1、环境搭建
前言: 2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. .NET Core是微软在两年前发起的 ...
- Egret 学习之简介,环境搭建及命令行语法 (一)
1,简介 1)egret是一个开源免费的游戏框架,它使用TypeScript脚本语言进行开发:当游戏完成最终的打包后,可以将程序转换为h5游戏,实现跨平台性:它基于BSD(Berkly Softwar ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- .Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)
.Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行) 遇到个诡异的问题,项目发布并寄宿到 IIS上后,Log4Net没有日志输出 1.原因分析 这不应该啊,所有的配置 ...
- (0)ASP.NET Core 简单介绍 和开发环境搭建 - ASP.NET从MVC5升级到MVC6
ASP.NET从MVC5升级到MVC6 总目录 ASP.NET Core 首先,ASP原本只是一种技术,这种技术从上个世纪90年代就有了. Active Service Page 和 Java Ser ...
- .net Core学习笔记:Windows环境搭建
1.安装 VS2015 Update3.如果已经安装了VS2015,但不是Update3版本,请在VS的工具 --> 扩展与更新 中执行update3的升级(大约需要2小时). 2..net C ...
- .net core系列之《sdk和runtime区别及使用CLI在Ubuntu上快速搭建Console,WebApi,MVC三大应用模型》
一.需要安装的软件 1.虚拟机安装Ubuntu系统(本人用的是vmware-14.1.12和buntu-18.04) 2.Xshell或 Putty(连接ssh服务) 3.FileZilla(ftp上 ...
随机推荐
- ASP.NET Aries 入门开发教程2:配置出一个简单的列表页面
前言: 朋友们都期待我稳定地工作,但创业公司若要躺下,也非意念可控. 若人生注定了风雨飘摇,那就雨中前行了. 最机开始看聊新的工作机会,欢迎推荐,创业公司也可! 同时,趁着自由时间,抓紧把这系列教程给 ...
- 谈一下关于CQRS架构如何实现高性能
CQRS架构简介 前不久,看到博客园一位园友写了一篇文章,其中的观点是,要想高性能,需要尽量:避开网络开销(IO),避开海量数据,避开资源争夺.对于这3点,我觉得很有道理.所以也想谈一下,CQRS架构 ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- History API与浏览器历史堆栈管理
移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有--针对不支持o ...
- 不懂CSS的后端难道就不是好程序猿?
由于H5在移动端的发展如日中天,现在大部分公司对高级前端需求也是到处挖墙角,前端薪资也随之水涨船高,那公司没有配备专用的前端怎么办呢? 作为老板眼中的“程序猿” 前端都不会是非常无能的表现,那作为后端 ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
- c# Enumerable中Aggregate和Join的使用
参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/asp.net-core-environment.html http://www.yuanjiaochen ...
- Java实现Excel中的NORMSDIST函数和NORMSINV函数
由于工作中需要将Excel中的此两种函数转换成java函数,从而计算内部评级的资本占用率和资本占用金额.经过多方查阅资料和整理,总结出如下两个转换方法 标准正态分布累计函数NORMSDIST: pub ...
- Flyweight(享元模式)
import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式 ...
- 【SAP业务模式】之ICS(四):组织单元的配置
SAP的ICS业务后台配置主要有以下几个配置点: 1.组织单元的配置(公司代码.销售组织.工厂.采购组织等): 2.主数据的部分: 3.订单和开票的定价过程: 4.开票输出类型: 5.公司间发票的配置 ...