自從微軟開始在Github上開源搞.NET Core后,.NET的跨平台逐漸就成真了。多年使用各種語言,說實話還是csharp用起來最舒服。不過現在的工作環境里使用它的機會比較少,大部分時候只是用來寫一寫命令行程序。不過,經過一段時間的開發,我發現大部分程序都可以被分離出有臉的部分/無臉的部分。
其中無臉的部分,最適合做成命令行程序。一旦你做成了命令行程序,對它進行的測試就會變得簡單,因為命令行本身就是一組API接口,只不過是以命令options的形式組織的。
這里記錄下MAC+Windows環境開發.NET Core命令行程序的小抄:
MacOS下開發.NET Core 命令行程序
- Mac下安裝.NET Core 2.0 preview: https://www.microsoft.com/net/core/preview#macos
- Mac下創建項目目錄,例如dothello
- cd到dothello目錄
- 創建控制台程序:
dotnet new console
,會自動生成dothello.csproj以及Program.cs - 創建sln:
dotnet new sln --name dothello
- 將csproj添加到sln:
dotnet sln add dothello.csproj
- 編寫csharp代碼。
- 編譯:
dotnet build dothello.sln
- 修改dothello.csproj,添加mac運行時
<PropertyGroup>
<RuntimeIdentifiers>osx.10.10-x64</RuntimeIdentifiers>
</PropertyGroup>
- 分析並准備依賴鏈:
dotnet restore dothello.sln
- 發布Mac版(無需安裝.NETCore即可運行的
Self-Contain
模式):dotnet publish -r osx.10.10-x64 dothello.sln -c Release
- 如果publish后不實用-r 指定運行時,則會發布依賴於dothello.csproj里指定的framework版本運行時的程序。
配置Windows的Visual Studio 項目解決方案
可以根據上述方式發布Windows上依賴於.netcore運行時的版本或者自包含的Native包。但是,如果想發布.NET 3.5下可以跑的單exe程序,有點問題。
解決方式是,切到Windows下使用VS建好VS版本的sln和csproj:
dothello_vs.sln
dothello_vs.csproj
然后切回MacOS,使用msbuid(.netcore自帶)編譯指定frameworkd即可:
msbuild /p:TargetFramework=net35 dothello_vs.sln /p:Configuration=Release
這個地方其實publish應該做的更好一些,或者讓msbuild直接支持dotnet創建的sln。