自从微软开始在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。