.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:

  1. .NET Core = 应用运行依赖的 .NET Core Runtime

  2. .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,这里还列出了注意事项:

  1. 虽然.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/

  2. 在Windows Servers上部署应用 ,可以单独安装ASP.NET Core Module for IIS 而不需要安装.NET Core runtime,可以通过命令行DotNetCore.1.0.0-WindowsHosting.exe OPT_INSTALL_REDIST=0

  3. Mac 系统的最低要求是macOS 10.11 (El Capitan)

  4. .NET Core 在Red Hat 系列服务器上支持的要 RHEL 7 Server,包括CentOS 7 以上,具体参看 https://access.redhat.com/documentation/en/dot-net-core/

  5. .NET Core 在Ubuntu上面的支持 需要 Ubuntu 14.04 LTS 和  Ubuntu 16.04 LTS

  6. 如果之前安装了.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 BuilderUsage: 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 filesOptions:
-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,将应用程序文件夹拷贝过来就能运行。 

默认的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。

相关文章:


原文地址:http://www.cnblogs.com/shanyou/p/5636920.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java语言中的访问权限控制符有哪些,18.Java的访问控制符

Java的访问控制符一.类的成员的可见性对于类的成员变量和成员方法&#xff0c;我们可以通过设定一定的访问可见性来限定应用范围。(一).privateprivate表示当前类访问权限。如果类里的一个成员(包括成员变量、方法、构造器等)使用private访问控制符来修饰&#xff0c;则这个成员…

ConcurrentHashMap能完全替代HashTable吗?

转载自 ConcurrentHashMap能完全替代HashTable吗&#xff1f;关于ConcurrentHashMap在之前的ConcurrentHashMap原理分析中已经解释了原理&#xff0c;而HashTable其实大抵上只是对HashMap的线程安全的封装&#xff0c;在JDK7与JDK8中HashMap的实现中解释了HashMap的原理。 至此…

购物车的功能——界面源码

里面所用到的图片资源统一都在“我的资源”里面&#xff0c;相对应的图片是“ 购物车源码相关图片 ”http://download.csdn.net/detail/qq_34137397/9665878&#xff0c; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o…

Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

前言 在上篇文章中&#xff0c;主要介绍了 Dotnet Core Run 命令&#xff0c;这篇文章主要是讲解如何在Linux中&#xff0c;对 Asp.Net Core 的程序进行发布和部署。 有关如何在 Jexus 中进行部署&#xff0c;请参见本人的另一篇文章&#xff1a;http://www.cnblogs.com/savorb…

php渐变字,jQuery_jQuery实现的立体文字渐变效果,先截两个图看看: 效果很 - phpStudy...

jQuery实现的立体文字渐变效果先截两个图看看&#xff1a;效果很不错吧&#xff1f;会不会误以为这些字体是图片&#xff1f;这可不是图片&#xff0c;而是用JS实现的在线演示 http://demo.phpstudy.net/js/gradient-test/demo.htm下面来简单分享下实现过程及原理(网站中使用了…

https 单向认证和双向认证

转载自 https 单向认证和双向认证 一、Http HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;是互联网上使用最广泛的一种协议&#xff0c;所有WWW文件必须遵循的标准。HTTP协议传输的数据都是未加密的&#xff0c;也就是明文的&#xff0c;因此使用HTT…

python中将整数转化为八进制的函数,Python进制转化

Python中的进制有二进制、八进制、十进制、十六进制&#xff0c;用python的内置函数可以方便的进行不同进制之间的转换&#xff0c;二、八、十六进制数字表示前面分别添加0b、0o、0x(前面为零)。二进制八进制十进制十六进制0b1010o1271230x1a转化为十进制int()可以接收一个或者…

Asp.Net Core 发布和部署(Linux + Jexus )

前言 在上篇文章中&#xff0c;主要介绍了 Dotnet Core Run 命令&#xff0c;这篇文章主要是讲解如何在 asp.net core 中对我们的已经完成的程序进行发布和部署。 有关如何使用 Nginx 进行部署&#xff0c;请参见本人的另一篇文章&#xff1a;http://www.cnblogs.com/savorboar…

购物车的功能——CSS源码

里面所用到的图片资源统一都在“我的资源”里面&#xff0c;相对应的图片是“ 购物车源码相关图片 ”http://download.csdn.net/detail/qq_34137397/9665878&#xff0c; 此CSS的对应的是“购物车的功能——界面源码”的内容 charset "gb2312"; /* CSS Document */…

Java NIO系列教程(十 五)Java NIO Path

转载自 Java NIO系列教程&#xff08;十 五&#xff09;Java NIO Path译文链接 译者&#xff1a;章筱虎 Java的Path接口是Java NIO2 的一部分&#xff0c;是对Java6 和Java7的 NIO的更新。Java的Path接口在Java7 中被添加到Java NIO&#xff0c;位于java.nio.file包中&#x…

discuz 版块导航function_forumlist.php,Discuz! X2“扩建”左侧版块导航 让社区层次一目了然...

一般情况下&#xff0c;当社区具有大量栏目和版块的时候&#xff0c;用户往往很容易迷失其中&#xff0c;不清楚自己所在的版块位置&#xff0c;同时也很难找到“目的”版块&#xff0c;容易造成不良的用户体验。Discuz!X2针对此问题在“用户体验”方面做了深度优化。Discuz!X2…

学习ASP.NET Core,你必须了解无处不在的“依赖注入”

ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道&#xff0c;不论是管道自身的构建&#xff0c;还是Server和Middleware自身的实现&#xff0c;以及构建在这个管道的应用&#xff0c;都需要相应的服务提供支持&#xff0c;ASP.NET Core自身提供了一个DI容…

Java 进程间文件锁FileLock详解

转载自 Java 进程间文件锁FileLock详解最近需要在两个进程中对同一个文件进行操作&#xff0c;正好Java 提供了文件锁FileLock类&#xff0c;利用这个类可以控制不同程序(JVM)对同一文件的并发访问&#xff0c;实现进程间文件同步操作。FileLock是java 1.4 版本后出现的一个类…

求瑞年的java程序,java 计算瑞年的方法

任何语言都有可能计算某一年是否为瑞年的方法&#xff0c;也就是说一年有 366 天&#xff0c;每隔4 年就出现一次。最基本的算法如下&#xff1a;if year is divisible by 400 thenis_leap_yearelse if year is divisible by 100 thennot_leap_yearelse if year is divisible b…

购物车的功能——JS源码

此CSS的对应的是“购物车的功能——界面源码”的内容和“购物车的功能——CSS源码”的内容&#xff0c;希望大家不要乱 $(function(){//点击复选框全选或全不选效果$("#allCheckBox").click(function(){var checked$(this).is(":checked");$(".cart_t…

.NET Core应用类型(Portable apps amp; Self-contained apps)

介绍 有许多种方式可以用来考虑构建应用的类型&#xff0c;通常类型用来描述一个特定的执行模型或者基于此的应用。举例说&#xff1a;控制台应用&#xff08;Console Application&#xff09;、Web应用&#xff08;Web Application&#xff09;等等。所有这些类型的应用都可以…

Java NIO系列教程(十二) Java NIO与IO

转载自 Java NIO系列教程&#xff08;十二&#xff09; Java NIO与IO 译文地址 作者&#xff1a;Jakob Jenkov 译者&#xff1a;郭蕾 校对&#xff1a;方腾飞 当学习了Java NIO和IO的API后&#xff0c;一个问题马上涌入脑海&#xff1a; 我应该何时使用IO&#xff0c;何…

php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...

嗨&#xff0c;我是Oracle的新手。我试图在PHP中使用oracle将记录插入表中。 但它不起作用&#xff0c;也没有抛出任何错误。以下是我的代码。 请告诉我我做错了什么。$insertSQL "INSERT INTO GL_USR_MAIL_FOLDER(FK_GLUSR_USR_ID, GL_USR_MAIL_FOLDER_NAME) VALUES (:US…

.NET Core 1.0发布:微软开源跨平台大布局序幕

在6月27日的红帽DevNation峰会上&#xff0c;微软正式发布了.NET Core 1.0、ASP.NET 1.0和Entity Framework Core 1.0&#xff0c;这些产品将全部支持Windows、OS X和Linux三种操作系统。其中.NET Core最受瞩目&#xff0c;这是一款跨平台、开源且模块化的.NET平台&#xff0c;…

无缝滚动图片——源码

图片已上传&#xff0c;请到我的资源部去下载&#xff0c;不用积分&#xff0c;——无缝滚动图片http://download.csdn.net/detail/qq_34137397/9665933 </head> <body> <div class"control"><label id"chk_pause"><input type…