﻿# 如何將 Visual Studio 開發好的 .NET 部署至 Ubuntu ( Mono )

最近開始將一些用 .NET 寫的程式部署到 Ubuntu Linux 上執行，大多都是一些小型的工具軟體 (Console Apps)，部署的過程其實還算順利，大致分享幾個關鍵動作與開發技巧。

### 在 Ubuntu 8.04 LTS 安裝 .Net Framework 2.0 執行環境 ( Runtime )

由於 Ubuntu 8.04 LTS 已經內建 mono ( 含 .net 1.1 與 2.0 )，所以可以直接透過 apt-get 進行安裝：

```
apt-get install mono-2.0-devel
```

只要安裝 mono-2.0-devel 他就會自動幫你安裝所有相依的套件。如果你有安裝 X-Windows 視窗畫面的話，可以多安裝一個 libmono-winforms2.0-cil 套件，就可以在 X-Windows 上執行 WinForm 的程式了：

```
apt-get install mono-2.0-devel libmono-winforms2.0-cil
```

### 正確設定執行 .NET 應用程式的環境要求

如果你的 Console 應用程式中有出現**中文字**的話，由於 .NET 是一套完全以 Unicode 為主的程式架構，所以你務必要檢視系統是否可以顯示中文，而且連上 Linux 的連線工具可以正確顯示 Unicode 文字才行。

首先，必須設定 Linux 下的 **LANG** 環境變數，而且要指定為 **UTF-8** 編碼，如下：

```
export LANG=zh_TW.UTF-8
```

至於連線工具建議使用 Unicode 支援度較佳的 [PieTTY](http://www.csie.ntu.edu.tw/~piaip/pietty/) 連線程式，並且確定連上時的**字元編碼**設定是否切換到 **Unicode ( UTF-8 )** 這一項。

![連線工具建議使用 Unicode 支援度較佳的 PieTTY 連線程式，並且確定連上時的字元編碼設定是否切換到 Unicode ( UTF-8 ) 這一項。](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4867f37680329094f675-image_3.png "連線工具建議使用 Unicode 支援度較佳的 PieTTY 連線程式，並且確定連上時的字元編碼設定是否切換到 Unicode ( UTF-8 ) 這一項。")

### 執行 .NET 2.0 應用程式 ( Console Application )

所有要在 Linux 下執行 .NET 的程式，都必須透過 mono 程式啟動，例如：

```
mono ConsoleApplication1.exe
```

### 整合 Visual Studio 開發流程並自動部署至 Linux 主機

整體來說，我個人覺得在 Windows 利用 Visual Studio 開發一些工具，然後部署到 Linux 執行的過程還蠻順利的，像我就透過 [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) 官網所提供的 [PSCP](http://the.earth.li/~sgtatham/putty/latest/x86/pscp.exe) 指令列工具搭配 Visual Studio 中的 Post-build event 讓我在建置(Build)完成後自動將新的程式部署到公司內部的 Linux 測試主機，然後就可以立即進行測試。指令大致如下：

```
pscp.exe -i "G:\PuTTY Private Key.ppk" ParseMBOX.exe root@10.0.0.1:.
```

**額外補充：**

**Linux 平台下類似 Visual Studio 的開發工具：MonoDevelop**

目前推出到 [MonoDevelop 2.0](http://monodevelop.com/) 版，可以完全在 Linux 環境下開發 .NET 2.0 應用程式 ( 支援 C# 3.0 )，包括 ASP.NET 與 WinForm。

**在 Visual Studio 中安裝 Mono 外掛工具**

現在 Mono 官方還提供[支援 Mono 的 Visual Studio 外掛工具](https://marketplace.visualstudio.com/items?itemName=SimonEgli.MonoTools)，可以在 Visual Studio 測試 Mono 的相容性 ([MoMA](http://mono-project.com/MoMA))，還支援**遠端除錯**，讓你可以在 Visual Studio 中直接測試 Linux 上執行的程式，在[這裡](https://web.archive.org/web/20090612224219/http://go-mono.com/monovs/Debug.aspx)有完整的圖說，該工具會自動編譯 –> 複製輸出到 Linux 主機 –> 並且自動啟動執行，不止 WinForm、WebForm (ASP.NET) 都可以，幾乎讓你離不開 Visual Studio 的視線。

雖然該工具目前處於 Preview 的階段，但似乎挺有趣的，有興趣的人可以玩玩看。

![Mono Tools for Visual Studio Preview Released](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/50e39fcba5923c4cae52-image_6.png "Mono Tools for Visual Studio Preview Released")

**相關連結**

-   [Mono Project](http://mono-project.com/)
-   [Mono Tools for Visual Studio](https://marketplace.visualstudio.com/items?itemName=SimonEgli.MonoTools)
-   [Mono Tools for Visual Studio Preview Released](https://web.archive.org/web/20110512012457/http://www.mono-project.com/news/archive/2009/Jun-08.html)
-   [The Mono Migration Analyzer (MoMA)](http://mono-project.com/MoMA)
-   [介紹好用工具：Mono Migration Analyzer (MoMA)](/post/2008/11/07/Useful-tool-The-Mono-Migration-Analyzer-MoMA)
-   [PieTTY (pputty): piaip's reimplementation of PuTTY](http://www.csie.ntu.edu.tw/~piaip/pietty/)
-   [PuTTY Download Page](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
