2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峯會上正式發佈,社區裏涌現了不少文章,我也計劃寫個系列文章,緣由是.NET Core的入門門檻至關高,頗有必要寫個深刻淺出的系列文章,本節內容幫助你入門。我將可能用Windows作開發環境,也可能用Linux/Mac,可是全部的dotnet CLI命令都是跨平臺的,咱們在windows/Linux/mac平臺上開發跨平臺的應用。html
.NET Core 包括.NET Core Runtime 和 .NET Core SDK:node
下載地址請到dotnet官方網站dot.net (dot dot net),很是的好記,這個網站也是你入門學.NET Core的入口網站,記住這是個必需要去網站。.NET Core 下載的具體地址:https://www.microsoft.com/net/download#core,這裏還列出了注意事項:python
.NET Core 的具體安裝方法能夠參看文章 .Net Core 系列:一、環境搭建。golang
.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全新的開發體驗 。json
咱們就來經過一個Hello World例子來學習下dotnet 命令行,咱們安裝好.NET Core 1.0,就能夠作下面的事情了:ubuntu
>dotnet new
>dotnet restore
>dotnet runwindows
想象着和我一起,當你把這個和在Mac, Windows, Linux上運行的 Visual Studio代碼相比較時,那麼你已經得到了一個很是精彩的故事。能夠很容易的在不少地方運行開源的.NET 代碼。centos
下面是一段比較長的的代碼,建立一個控制檯應用,只要在頂部輸入「dotnet」,就能夠獲得不少能用的東西。api
[root@Mono helloworld]# dotnetruby
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 應用運行起來了。
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#語言支持的項目類型以下:
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),其中包括有關全部被恢復的軟件包的詳細的信息。
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。
大多數狀況下,你都是跳過上面的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命令運行已經編譯好的應用,把應用路徑做爲參數傳遞給dotnet命令
> dotnet .\bin\Debug\netcoreapp1.0\helloworld.dll
Hello World!
pack命令編譯項目並生成NuGet包,該操做會生成兩個NuGet程序包:
項目依賴的NuGet項目添加到生成nuspec文件中,默認狀況不打包項目之間的引用關係,但能夠經過更改項目的相關性類型。
發佈命令會編譯應用程序並讀取項目文件,而後將結果集的文件發佈到一個目錄。生成目錄的內容將取決於項目的類型,但能夠包括一個跨平臺的 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服務器。
測試命令用來運行測試項目,使用配置的測試運行程序中定義的測試套件。你會了解更多有關此命令在本教程的後面的章節裏瞭解更詳細的內容。
下次咱們將深刻了解一下到 project.json 文件,並開始嘗試在如何構建更復雜的應用程序與新的.Net Core。