dotnet core多平臺開(kāi)發(fā)體驗

10年前 (2014-08-09)閱讀462回復0
全橙相伴
全橙相伴
  • 管理員
  • 發(fā)消息
  • 注冊排名252
  • 經(jīng)驗值175
  • 級別管理員
  • 主題35
  • 回復0
樓主

  隨著(zhù)net core rc2的發(fā)布,園子里面關(guān)于net core的入門(mén)文章也也多了起來(lái),但是大多數都是在一個(gè)平臺上面來(lái)寫(xiě)幾個(gè)簡(jiǎn)單的例子,或者是在解釋代碼本身,并沒(méi)有體現說(shuō)在一個(gè)平臺上面創(chuàng )建一個(gè)項目,然后通過(guò)源碼管理簽出到另一個(gè)平臺上繼續開(kāi)發(fā)。還有就是一次編譯到處運行是如何體現的?這樣類(lèi)型的文章好像還沒(méi)有在哪里看到過(guò),于是我就想自己來(lái)一遍,并把這個(gè)過(guò)程分享出來(lái)給大家。

  首先來(lái)個(gè)官方的介紹:

  .NET Core - .NET 使用 .NET Core 跨平臺運行

  Announcing .NET Core RC2 and .NET Core SDK Preview 1

  一、mac os x 上的開(kāi)發(fā)

  本來(lái)環(huán)境安裝是不想寫(xiě)的,因為有太多的文章,但是不寫(xiě)的話(huà)又感覺(jué)少了些什么。然后我只有一個(gè)mac和一個(gè)安裝win10的pc,所以就只針對這兩個(gè)平臺來(lái),linux等我有錢(qián)買(mǎi)新電腦再來(lái)折騰。廢話(huà)不多說(shuō),下面開(kāi)始介紹。

  mac os x環(huán)境下 dotnet core 的安裝

021yin.com /net/core#macosx

  首先要先安裝一個(gè) OpenSSL 這個(gè)是以后 dotnet core 要下載一些依賴(lài)庫什么的會(huì )用到的。可以使用 brew 來(lái)安裝OpenSSL

  打開(kāi)命令終端輸入brew安裝命令

021yin.com /Homebrew/install/master/install)"

  安裝好brew 之后繼續輸入OpenSSL安裝命令

  brew install openssl

  brew link --force openssl

  這兩個(gè)東西安裝后,我們就可以來(lái)安裝我們我們的core了,下載這么一個(gè)安裝包 點(diǎn)擊下載 這是一個(gè)pkg安裝包。我現在的時(shí)候是 dotnet-dev-osx-x64.1.0.0-preview1-002702.pkg 只要雙擊一下安裝包,然后一直點(diǎn)擊繼續就可以了

  安裝完之后可以輸入命令查看dotnet core 有沒(méi)有安裝成功

  dotnet -v

  命令行下的項目建立與運行

  安裝完環(huán)境后,我們就可以來(lái)開(kāi)始我第一個(gè)項目。我們新建一個(gè)文件夾叫做LearnDotnetCore然后打開(kāi)命令窗口 cd 到這個(gè)文件夾下面。然后用命令 dotnet new來(lái)建立初始化一個(gè)項目。初始化完后我們看看到文件夾下面多了兩個(gè)文件 Program.cs project.json

  Program.cs 是c#源碼文件,可以用來(lái)實(shí)現我們的具體邏輯

  project.json 是配置依賴(lài)框架,依賴(lài)包,版本號,還有其他一些編譯會(huì )用到相關(guān)的東西。這個(gè)作用和nodejs的模式是相類(lèi)似的。

  項目創(chuàng )建完之后需要 dotnet restore 來(lái)下載我們配置好的依賴(lài)包。下載完后呢文件夾里面多出了一個(gè) project.lock.json 文件,打開(kāi)來(lái)看,可以看到我們下載了那些依賴(lài)庫,還有一些編譯的引用等。

  下載完依賴(lài)庫后,我們可以通過(guò)運行命令 dotnet run 來(lái)編譯運行我們的程序。

  編譯完成后,文件夾內會(huì )多出兩個(gè)文件夾 bin 和 obj 。

  bin 是我們編譯的完成的文件

  obj 里面是一些編譯輸出和動(dòng)態(tài)庫連接等的一些信息。

  然后運行我們可以看到輸出 Hello World! 到這來(lái),我們的命令行建立、編譯和運行程序就到這來(lái)結束了。

  使用vscode調試運行

021yin.com/en/latest/tutorials/your-first-mac-aspnet.html#running-locally-using-kestrel

  單純使用命令行來(lái)開(kāi)發(fā)的話(huà),那么肯定是沒(méi)有那么方便了,但是在但是目前好像也沒(méi)有什么特別好的選,所以我們就使用 Visual Studio Code 然后再安裝一個(gè)插件C# extension

  還有一個(gè)叫做Xamarin Studio.,貌似還沒(méi)有支持到 dotnet core的樣子

  當然還有一個(gè)叫做 Project Rider的東西,之前 net core 用 DNX 命令的時(shí)候下載來(lái)玩過(guò)一下,支持什么的還可以,不過(guò)很久沒(méi)有玩了,最近一次編譯更新是在 5月17號,也不知道現在支持如何。有興趣的同學(xué)自己下載來(lái)玩下,內容不在本文章中介紹了。

  打開(kāi)vscode然后把項目的文件夾拖拉到vscode的窗口上面去,會(huì )在左邊的工作空間欄目中顯示項目的樹(shù)形結構。然后我們選擇project.json,編輯器會(huì )提示你是否要加入調試信息,然后我們點(diǎn)擊yes,目錄結構就會(huì )多出一個(gè).vscode文件夾里面有兩文件 launch.json 和 tasks.json

  然后我們去修改 launch.json 里面的內容,把program里面的內容改成我們編譯完成后的dll路徑,當然有的有時(shí)候會(huì )給你自動(dòng)生成好的,不需要自己修改。

  "program": "${workspaceRoot}/bin/Debug/netcoreapp1.0/LearnDotnetCore.dll",

  還有就是args也修改一下,這個(gè)是main函數的傳入值。

  "args": ["我試試看傳入了什么"],

  修改完后在Program.cs里面加個(gè)斷點(diǎn),接著(zhù)直接按f5,或者點(diǎn)開(kāi)debug面板,然后點(diǎn)擊那個(gè)調試按鈕開(kāi)始調試

  我們可以看到,一個(gè)變量的監視數據,還有就是控制臺打印出了 Hello World!

  代碼上傳

  我選擇了用github來(lái)保存代碼,并且在window上通過(guò)git下載到vs里面進(jìn)行繼續開(kāi)發(fā)

  首先我們打開(kāi)git面板來(lái)初始化git儲存庫

  初始化完后,我們可以看到我們有15個(gè)文件要提交,但是我們并不需要把這么多個(gè)文件都給提交了,我們只要提交Program.cs project.json 這兩個(gè)文件,然后在其他地方下載后來(lái)生成其他文件就可以了。

  于是,我們就添加了一個(gè).gitignore文件,文件內容添加要排除的東西,然后我們就剩下三個(gè)文件提交了

  最后,輸入提交的信息然后點(diǎn)擊那個(gè)勾符號,就提交到本地的庫里面了。

  完成了上面的步驟后,我們還需要把庫同步到github上面去。首先,我們去注冊一個(gè)賬戶(hù),然后新建一個(gè)repository,建立過(guò)程自己摸索,就不寫(xiě)的那么詳細。建完后如下圖

  然后到我們的目錄下輸入下面的兩條命令

021yin.com /kotcmm/LearnDotnetCore.git

  git push -u origin master

  如果有用戶(hù)名密碼,就輸入用戶(hù)名密碼,然后存儲庫就同步到了github上面去了。記住地址什么的要改成自己的。

  二、window 上的開(kāi)發(fā)

  切到win10上面來(lái)繼續完成這個(gè)博文。

  開(kāi)發(fā)環(huán)境的安裝

021yin.com /net/core#windows

  首先要先下載下面的工具:

  Visual Studio Community 2015

  DotNetCore.1.0.0.RC2-VS2015Tools.Preview1

  這兩個(gè)軟件的安裝就不需要截圖了,先安裝Visual Studio Community 2015再安裝DotNetCore.1.0.0.RC2-VS2015Tools.Preview1。安裝完之后我們打開(kāi)vs 2015,然后把我們之前在mac上面創(chuàng )建的項目給下載下來(lái)。

  打vs后我們選擇 open from source control 然后出現左邊的面板,如果沒(méi)有登錄你的github賬號,那么就先登錄你的賬號,然后再點(diǎn)擊Clone出現一個(gè)窗口選擇我們前面上傳的那個(gè)項目。

  下載完后雙擊我們的git項目,然后在彈出的窗口里面選擇project.json,就會(huì )生成左邊的那樣項目工程了。

  然后我們編譯成功并運行起來(lái)。

  到這里我們已經(jīng)成功的把在mac上面創(chuàng )建的項目拉到win下不改任何代碼,然后成功編譯運行了。

  發(fā)布運行

  參考資料:兩種部署方式

  上面的開(kāi)發(fā)過(guò)程中都是直接在id里面運行的,或者用 dotnet run 來(lái)直接運行的,那么我們編譯好之后如何脫離IDE來(lái)運行呢?

  我們也可以到編譯成功的目錄 netcoreapp1.0 下面輸入命令 dotnet LearnDotnetCore.dll 來(lái)運行我們的程序。

  可以在project.json加個(gè) runtimes 屬性,然后編譯出一個(gè)exe文件,然后直接運行exe。

  要編譯成Release的話(huà),可以用命令 dotnet build --configuration Release --no-dependencies --no-incremental 當然build的命令以后可以有單獨的文章來(lái)講解

  第一種編譯的配置

  "version": "1.0.0-*",

  "buildOptions": {

  "emitEntryPoint": true

  "dependencies": {

  "Microsoft.NETCore.App": {

  "type": "platform",

  "version": "1.0.0-rc2-3002702"

  "frameworks": {

  "netcoreapp1.0": {

  "imports": "dnxcore50"

  第二種編譯的配置

  "version": "1.0.0-*",

  "buildOptions": {

  "emitEntryPoint": true

  "dependencies": {

  "Microsoft.NETCore.App": {

  //"type": "platform",

  "version": "1.0.0-rc2-3002702"

  "frameworks": {

  "netcoreapp1.0": {

  "imports": "dnxcore50"

  "runtimes": {

  "win10-x64": {},

  "osx.10.11-x64": {}

  第二種配置使用dotnet publish會(huì )把core的支持運行一起打包處理,然后相關(guān)的平臺就不用安裝net core,但是不同平臺需要不同編譯。具體的效果和目錄結構我就不進(jìn)行截圖了,有興趣的自己編譯看看。

  三、改造成web項目

  前面介紹了如何編譯和運行控制臺的程序,但是在這個(gè)互聯(lián)網(wǎng)的時(shí)代,我感覺(jué)要做成一個(gè)web項目可能會(huì )更有趣,我們看看如何直接把前面控制臺的項目變成web項目。

021yin.com /git/git-install-setup

  vs修改運行

  首先修改配置 project.json,在屬性dependencies添加Kestrel依賴(lài)。

  第二添加一個(gè)類(lèi)Startup

  using System;

  using Microsoft.AspNetCore.Builder;

  using Microsoft.AspNetCore.Hosting;

  using Microsoft.AspNetCore.Http;

  namespace LearnDotnetCore

  public class Startup

  public void Configure(IApplicationBuilder app)

  app.Run(context =>

  return context.Response.WriteAsync("Hello from ASP.NET Core!");

  然后修改Program.cs

  using System;

  using Microsoft.AspNetCore.Hosting;

  namespace LearnDotnetCore

  public class Program

  public static void Main(string[] args)

  var host = new WebHostBuilder()

  .UseKestrel()

  .UseStartup<Startup>()

  .Build();

  host.Run();

  然后點(diǎn)擊運行按鈕,程序成功的運行起來(lái)

  打開(kāi)瀏覽器訪(fǎng)問(wèn) !證明我們的程序已經(jīng)編譯并運行成功。

  發(fā)布并部署iis

  雖然說(shuō)直接運行可以訪(fǎng)問(wèn)成功,但是有的人就是喜歡部署到IIS上面去,所以這里也嘗試一下部署到IIS上面是什么樣的。

021yin.com/en/latest/publishing/iis.html

  安裝完IIS后需要安裝 DotNetCore.1.0.0.RC2-WindowsHosting來(lái)支持 net core 在iis上面運行

  然后修改project.json的內容,添加下面三個(gè)東西,來(lái)支持iis運行

  然后修改Program.cs,添加iis支持

  using System;

  using System.IO;

  using Microsoft.AspNetCore.Hosting;

  namespace LearnDotnetCore

  public class Program

  public static void Main(string[] args)

  var host = new WebHostBuilder()

  .UseKestrel()

  .UseContentRoot(Directory.GetCurrentDirectory())

  .UseIISIntegration()

  .UseStartup<Startup>()

  .Build();

  host.Run();

  添加文件 web.config

  <?xml version="1.0" encoding="utf-8"?>

  <configuration>

  <!--

021yin.com /fwlink/?LinkId=786380

  -->

  <system.webServer>

  <handlers>

  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>

  </handlers>

  <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

  </system.webServer>

  </configuration>

  上面三個(gè)修改完之后,就可以來(lái)發(fā)布,選擇項目郵件,然后選擇發(fā)布會(huì )出現一個(gè)窗口

  輸入名稱(chēng),然后next或者直接publish,操作完成后會(huì )生成一堆文件。然后到iis里面創(chuàng )建 Web 站點(diǎn),然后綁定發(fā)布目錄就行,應用程序池的模式需要改為“無(wú)代碼托管”。

  啟動(dòng)網(wǎng)站運行后,瀏覽器輸入里面運行的效果是一樣的。

  四、申請vps并上傳項目運行

  在文章開(kāi)頭說(shuō)了,沒(méi)有Linux的系統,但是后來(lái)想了一下,還是也體驗一下看看,于是就去 host1plus 買(mǎi)了一個(gè)vps,一個(gè)是可以體驗一下發(fā)布一個(gè)net core 做的網(wǎng)站,另一個(gè)就是以后還可以放一些運行示例什么的。

  我買(mǎi)的vps安裝的是centos-7系統,可以使用ssh遠程登錄上去管理。先給安裝一個(gè) net core 的運行環(huán)境。

021yin.com /net/core#centos

  輸入安裝命令:

021yin.com /dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet

  結果返回了錯誤。

  dotnet_install: Error: Unable to locate libunwind. Install libunwind to continue

  dotnet_install: Error: Unable to locate libicu. Install libicu to continue

  dotnet_install: Error: Unable to locate gettext. Install gettext to continue

  看起來(lái)是缺少了幾個(gè)玩意,那好吧先來(lái)下載安裝,使用yum命令來(lái)安裝

  yum install libunwind

  yum install libicu

  yum install gettext

  重新輸入安裝命令:

021yin.com /dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet

  這次返回的信息是

021yin.com/dotnet/beta/Binaries/1.0.0-preview1-002702/dotnet-dev-centos-x64.1.0.0-preview1-002702.tar.gz

  dotnet-install: Extracting zip

  dotnet-install: Adding to current process PATH: /root/dotnet. Note: This change will be visible only when sourcing script.

  dotnet-install: Installation finished successfuly.

  然后再輸入命令

  sudo ln -s ~/dotnet/dotnet /usr/local/bin

  說(shuō)明:ln是linux中又一個(gè)非常重要命令,它的功能是為某一個(gè)文件在另外一個(gè)位置建立一個(gè)同步的鏈接.當我們需要在不同的目錄,用到相同的文件時(shí),我們不需要在每一個(gè)需要的目錄下都放一個(gè)必須相同的文件,我們只要在某個(gè)固定的目錄,放上該文件,然后在 其它的目錄下用ln命令鏈接(link)它就可以,不必重復的占用磁盤(pán)空間。

  然后我們再來(lái)輸入 dotnet 命令看看是否真的安裝成功了。安裝成功之后我們就要把之前編譯發(fā)布好的文件給上傳到vps上面去。(記住是要上傳 dotnet publish發(fā)布出來(lái)的那些文件)

021yin.com /peida/archive/2013/03/15/2960802.html

  文件上傳成功后我們執行 dotnet LearnDotnetCore.dll 命令來(lái)運行我們的網(wǎng)站程序。

0
0
收藏0
回帖

dotnet core多平臺開(kāi)發(fā)體驗 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息