如何在 Windows 上編寫 C# 但在 Linux 上執行?
我正在嘗試開始使用 Mono,但我正在努力解決有關 SO 的文件、部落格和其他問題。希望這個問題對其他人有用。
我想使用 VS2013 在 C# 中編寫一個數據攝取過程,因為那是我的母語,但我需要在 Linux 機器上執行它。沒有 UI,它是一個控制台應用程序。
假設 Mono(但不是 MonoDevelop)安裝在目標 Linux 機器上,我是否需要以不同的方式編譯我的 .csproj 以在 Linux 上的 Mono ‘CLR’ 下執行,如果是,我如何編譯項目,而不是範例編譯單個 .cs 文件?
我是否應該為 Windows 安裝 MonoDevelop,在該 IDE 中打開我的解決方案/項目並為 Linux 編譯它,複製輸出文件並在那裡執行 .exe?
否則,MSBuild 編譯的 .EXE 程序集中的 IL 是否會在 Mono 下的 Linux 上“正常工作”,並且引用的程序集是否可以正常載入(假設它們都在輸出文件夾中)?我必須複製任何 .NET Framework 程序集嗎?
Mono FAQ對您的問題有一個很好的回答:
Mono Binary 與 Windows 兼容嗎?
是的,Mono 與 Windows 二進制兼容。這意味著您可以執行由 Microsoft 和其他供應商提供的 .NET 編譯器生成的二進製文件。
移植應用程序時,您應該確保測試其功能,因為底層作業系統的差異和 VM 實現的差異(錯誤、缺少的功能)可能會影響您的應用程序。
Mono 沒有實現每個 .NET 1.1 API(請參閱 Mono 1.0 的 Mono 發行說明),當從 Windows 執行使用未實現 API 的二進製文件時,您可能會收到一條關於未找到令牌的模糊消息。
在這些情況下,使用 Mono 的 C# 編譯器編譯您的應用程序非常有用,以確保您使用受支持的 API。
這不是一個完美的解決方案,因為 Mono 中的某些 API 在某些情況下會拋出 NotImplementedExceptions,因此您仍然應該使用 Mono 測試您的應用程序。如果您關心應用程序的可移植性,請查看 MoMA,即遷移分析器。
是否有任何理由在 Mono 上建構而不是使用 Visual Studio 並複制二進製文件?
通常,如果您願意,可以繼續使用 Visual Studio 編寫程式碼。
使用 Linux 進行開發將鼓勵您更頻繁地在 Linux 上測試您的軟體,如果您有機會,它還將幫助您“dogfood”您自己的產品。
這個常見問題解答有點老了(它正在討論 Mono 1.0),但根據我的經驗,上述內容仍然適用。使用 Mono 編譯(或在 MonoDevelop 或 Xamarin Studio 中開發)總是好的,以確保您沒有使用任何 Microsoft 特定的庫。
至少,您應該使用可以在沒有 Visual Studio 的情況下執行的測試套件(因此,請避免使用內置的 Microsoft 測試工具)。這樣,您就可以在您計劃部署的所有系統上執行測試。MonoDevelop 附帶 NUnit,可在 Windows、Linux 和 OS X 上執行。
一些快速的額外想法:
- 不要在程式碼中使用 Windows 路徑分隔符 ("") 作為文字。使用
System.IO.Path.PathSeparator.- 始終使用
System.Environment.NewLine而不是換行符 (\n) 和輸入符 (\r)。