[.NET][C#].NET走跳在Linux的人生(二)Mono Runtime

上一篇我們簡單用mono project網站所提供的範例,在Linux新增helloworld.cs程式碼並且編譯然後執行,上一篇可以確保mono runtime以及編譯器都有安裝正確,接下來這篇則是計畫直接把Windows環境編譯好的exe及dll(msil:byte code)放到Linux環境下執行,可以發現透過Mono CLR(Microsoft-Compatible APIs),我們可以不用重新編譯就執行.NET的執行檔。 

 

環境:

  • 開發環境: Windows 10 + Visual Studio 2017  
  • AP環境: Red Hat Enterprise Linux 7.3
  • DB環境: Red Hat Enterprise Linux 7.3 + SQL Server 2017 CTP2.1 

 

步驟: 

  • 1.準備資料庫測試資料 
  • 2.Windows環境開發主控台應用程式 
  • 3.從Windows把編譯結果搬到Linux 
  • 4.登入Linux執行程式 

 


首先準備簡單的測試資料

USE TEMPDB 
  
CREATE TABLE POKERS( 
    ID INT 
    , NAME VARCHAR(20) 
    ,TITLE VARCHAR(10) 
    ,COLOR VARCHAR(10) 
    ) 
  
INSERT INTO POKERS 
VALUES(1, 'David',      'King', 'Spades' ), 
      (2, 'Charlemagne','King', 'Hearts' ), 
      (3, 'Caesar',     'King', 'Diamonds'), 
      (4, 'Alexander',  'King', 'Clubs' ), 
      (5, 'Athena',     'Queen','Spades' ), 
      (6, 'Judith',     'Queen','Hearts' ), 
      (7, 'Rachel',     'Queen','Diamonds' ), 
      (8, 'Argine',     'Queen','Clubs' ), 
      (9, 'Ogier',      'Jack', 'Spades'), 
      (10,'La Hire',    'Jack', 'Hearts'), 
      (11,'Hector',     'Jack', 'Diamonds' ), 
      (12,'Hammer',     'Jack', 'Clubs' )

 

我們有12筆撲克牌人物測試資料了!

 


2.Windows環境開發 

新增主控台應用程式(.NET Framework) 

Nuget安裝Dapper

新增一個類別 poker.cs 

poker.cs程式碼如下: 

namespace MonoConsole 
{ 
    public class poker 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
        public string Title { get; set; } 
        public string Color { get; set; } 
    } 
} 

打開program.cs程式:

打開program.cs程式 
using Dapper; 
using System.Data.SqlClient; 
  
namespace MonoConsole 
{ 
    internal class Program 
    { 
        //連線字串寫在這是不好的範例 
        public static string CN = @"data source=192.168.100.100;initial catalog=tempdb;User ID=ImDBA;Password=secret"; 
  
        private static void Main(string[] args) 
        { 
            using (SqlConnection db = new SqlConnection(CN)) 
            { 
                db.Open(); 
                string query = "Select * From Pokers "; 
                var Pokers = db.Query<poker>(query); 
                foreach (var poker in Pokers) 
                { 
                    System.Console.WriteLine($"ID={poker.Id}, Name={poker.Name} ,Title={poker.Title} ,Color={poker.Color}"); 
                } 
            } 
        } 
    } 
} 

Windows環境執行Console程式

頭好壯壯! 

 


3.接著把程式執行檔搬到Linux 

在Windows下,打開命令提示字元 Windows鍵 + R  + Cmd

pscp -r E:\Test\MonoConsole\bin\Debug\*.* root@192.168.100.101:/root/dotnet/

 


4.登入Linux環境並且使用Mono執行 

先切到root/dotnet 目錄 

mono MonoConsole.exe

正確執行成功! 

 


小結:

  • 由於還是很習慣Windows以及地表最強IDE的Visual Studio開發環境,暫時就先不用試用MonoDevelop IDE進行開發,從Windows開發完再到Linux佈署是還不錯的選擇。 
  • 因為想測試Mono Runtime,也不先考慮AnyExec。 

 

Mono Feature Highlights

 

 


參考:  

DEVELOPING .NET SOFTWARE ON LINUX WITH MONO 

Getting Started (Mono-basics)