Mac/Windows开发跨平台.NET Core 控制台程序
自从微软开始在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 控制台程序的更多相关文章
- 在Mac下运行ASP.NET Core应用程序
在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的第一个ASP.NET应用. 开发环境搭建 首先 ...
- Mac下运行ASP.NET Core应用程序
Mac下运行ASP.NET Core应用程序 在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的 ...
- ASP.NET Core 中文文档 第二章 指南(8) 使用 dotnet watch 开发 ASP.NET Core 应用程序
原文:Developing ASP.NET Core applications using dotnet watch 作者:Victor Hurdugaci 翻译:谢炀(Kiler) 校对:刘怡(Al ...
- MAC COCOA call command 调用终端控制台程序
MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
使用 dotnet watch 开发 ASP.NET Core 应用程序 原文:Developing ASP.NET Core applications using dotnet watch作者:Vi ...
- VisualStudioCode创建的asp.net core控制台程序部署到linux
1.asp.net core控制台程序 static void Main(string[] args) { ; ) { Console.WriteLine("Hello World!&quo ...
- 在.NET Core控制台程序中使用依赖注入
之前都是在ASP.NET Core中使用依赖注入(Dependency Injection),昨天遇到一个场景需要在.NET Core控制台程序中使用依赖注入,由于对.NET Core中的依赖注入机制 ...
- 使用VS Code开发ASP.NET Core 应用程序
最新教程:http://www.cnblogs.com/linezero/p/VSCodeASPNETCore.html 使用VS Code开发ASP.NET Core 应用程序 准备 1.安装VS ...
- .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 ...
随机推荐
- B趣味求和
编写一个程序,求Sn=a+aa+aaa+--+aa-aaa(有n个a)的值,其中a是一个数字. Input 输入数据含有不多于50组的数据,每组数据由两个正整数(0<a, n < 10)组 ...
- 解读 Vue 之 Reactive
本文同步发表在 https://github.com/whxaxes/blog/issues/7 前言 在一篇文章中简单讲了 vue 是如何把模板解析成 render function 的,这一篇文章 ...
- Java入门——(4)多线程
关键词:线程.Thread.Runnable.sleep().yield().join().同步 一.线程的概述 在一个操作系统中,每个独立执行的程序都可以称为一个进程,也就是"正在 ...
- trycatch放在for循环的里面还是外面好
try放在for循环里面和外面的区别是什么呢?先看看下面的代码的区别:public class Test { public void test1(){ for (int count ...
- MySQL中的完整性约束
对于已经创建好的表,虽然字段的数据类型决定所能存储的数据类型,但是表中所存储的数据是否合法并没有检查. MySQL支持的完整性约束: NOT NULL 约束字段的值不能 ...
- MFC加载PNG图片并实现双缓冲
因为PNG包含Alpha通道,所以不同于BITMAP,在MFC中使用CImage类对其进行处理,通常使用load和draw成员函数. 所以标题的论述可以进一步解释为,使用CImage实现双缓冲. 通常 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(二)用户接口层之RtspClient类及其构造函数
RtspClient类是myRTSPClient函数库所有特性集中实现的地方. 主要为用户提供: 1. RTSP协议通信接口函数,如DoOPTIONS(): 2. RTSP账号.密码设置函数,如Set ...
- python 学习网站
python 文档库 docs.python.org/2/library/index.html python 第三方模块查找 pypi.python.org
- Java8 lamda表达式快速上手
1.对比着经典foreach 简单的循环 o相当于foreach中的临时变量,要遍历的list放在句首 list.foreach(o->{你要进行的操作}); package com.compa ...
- 迈向angularjs2系列(1):typescript指南
typescript指南 前言 typescript是angularjs2推荐使用的脚本语言.它由微软2012年首次发布. 一. typescript和javascript的区别 1.从遵循的规 ...