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

Mac/Windows开发跨平台.NET Core 控制台程序的更多相关文章

  1. 在Mac下运行ASP.NET Core应用程序

    在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的第一个ASP.NET应用. 开发环境搭建 首先 ...

  2. Mac下运行ASP.NET Core应用程序

    Mac下运行ASP.NET Core应用程序 在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的 ...

  3. ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序

    原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...

  4. MAC COCOA call command 调用终端控制台程序

    MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...

  5. 使用 dotnet watch 开发 ASP.NET Core 应用程序

    使用 dotnet watch 开发 ASP.NET Core 应用程序 原文:Developing ASP.NET Core applications using dotnet watch作者:Vi ...

  6. VisualStudioCode创建的asp.net core控制台程序部署到linux

    1.asp.net core控制台程序 static void Main(string[] args) { ; ) { Console.WriteLine("Hello World!&quo ...

  7. 在.NET Core控制台程序中使用依赖注入

    之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...

  8. 使用VS Code开发ASP.NET Core 应用程序

    最新教程:http://www.cnblogs.com/linezero/p/VSCodeASPNETCore.html 使用VS Code开发ASP.NET Core 应用程序 准备 1.安装VS ...

  9. .Net Core 控制台程序错误:Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'.

    .Net Core 控制台程序错误:Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible wi ...

随机推荐

  1. jsp隐藏关键 敏感信息,只显示前后字段

    今天写jsp页面,要求对字段中间部分隐藏,只显示前几位和后几位.搜了一下发现网上大都是隐藏前面指定字段,或者是利用正则表达式隐藏手机号或是身份证.这样的话必须预先知道字段长度,而我不想知道长度只显示前 ...

  2. 解决QT编程出现 C2001错误

    最近做项目时,在debug输出或者是在其他用到字符串常量的时候,总会时不时的出现C2001错误,提示"常量中有换行符", 比如 tr("删除此设备") 或者 q ...

  3. 关于 Overtrue 的拼音库 overtrue/pinyin 为何 travis 为 error【社交系统研发日记十】

    什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).社交系统 ...

  4. Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法[转]

    --安装Oracle 11gR2,报错:[INS-06101] IP address of localhost could not be determined--------------------- ...

  5. Linux逻辑卷管理器concept

    Linux逻辑卷管理concept-------------------------转载2013/10/09 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM) ...

  6. Markdown转HTML/pdf格式

    Markdown转HTML/pdf格式 通过_github自带_的更新博客的网页: https://github.com/YOUR_GITHUB_ACCOUNT/YOUR_GITHUB_ACCOUNT ...

  7. mysql按某个列执行1-N排名的问题

    对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (` ...

  8. mysql为什么范围查询(>,<,between,%like,like%)之后的索引无效

    因为使用了范围索引,所以会使用满足范围的所有的值,也就是说存储引擎在这个时候会提取出满足之后条件的所有值,并遍历获取满足之后条件的值. http://www.itpub.net/thread-1901 ...

  9. WebService/WCF/WebAPI区别

    详细描述它们之间的区别,为什么这么选择,尤其是WCF vs WebAPI

  10. 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column

    背景 最近收到了一个关于以前项目的维护请求,那时的楼主还是刚刚工作的小青年~~~ 项目之前使用的是.net/winform.今天重新打开代码,看着之前在FrameWork2.0下面的代码, 满满的回忆 ...