Mac/Windows开发跨平台.NET Core 控制台程序

时间:2021-09-28 16:53:00

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