最近在了解Asp.net Core 1.0(也可称为Asp.net5\Asp.net vNext)的跨平台,发现了两个新的新东西:Sake和KoreBuild(或者已经出了很久)。

通过国内某度查询资料大部分都是复制黏贴来的,几乎没有详细的介绍。

只好看源码,Sake可以到Github查到源码。

KoreBuild可以通过Nuget下载安装。

那KoreBuild和Sake是什么呢?他们和跨平台有什么关系呢?

首先是Sake

它是Asp.net vNext项目团队中某些人的一个周末项目。

由于msbuild对vNext项目的生成编译支持得不是太友好,所以Sake被创建出来。

Sake需要运行在CLR上。如果Sake想运行在Linux环境下,必需要有Mono(含MonoCLR)的支持。

另外目前CoreCLR还不够完善,或许在不远的将来,我们就可以彻底抛弃Mono了。

通过下面Sake的源码可以得知它在windows环境下还是是调用了msbulid.exe,在其他平台使用了xbuild工具进行生成。

Sake会在执行命令的当前目录下默认寻找名为“src”文件夹,对该文件夹下面的项目进行编译

Sake自身的项目文件还包括一堆.shade文件,shade文件是Sake生成和编译需要的执行脚本。

而KoreBuild,本身既是一个Sake的管理工具,可以利用KoreBuild安装Sake和其他Sake运行需要的环境。

也是Sake在执行编译生成时,能够提供Sake不具备的一部分.shade文件。

打开KoreBuild的安装路径,发现了KoreBuild.cmd文件和KoreBuild.cmd,和一推上面提到的Sake需要用到的shade文件。

众所周知

cmd是在windows环境下执行的命令文件;

sh是其他OS下的执行文件。

通过KoreBuild.cmd文件的最后一行发现在执行Sake.exe 把KoreBulid文件夹 当成 include-dir参数传进去,

显式指定Sake要使用的额外shade文件集合。

执行Sake.exe 的参数说明:

Usage: Sake [OPTIONS]+ [target]+

Options:
-v, --verbose increase verbosity
-h, -?, --help show this message and exit
-f, --file, --makefile=VALUE read file as a makefile
-C, --directory=VALUE change current directory
-I, --include-dir=VALUE specifies a directory to search for included files

另外KoreBuild会默认读取名为makefile.shade的脚本作为Sake首先要执行的脚本,通过-f参数传入,类似的makefile.shade文件如下

里面提到的use-standard-lifecycle.shade是包含在Sake项目下的,而k-standard-goals.shade是包含在KoreBuild中。

如果想另外添加需要编译的你的项目文件(不只是src路径下的项目),可以在makefile.shade文件后追加

总结:

Sake是一款C#的跨平台编译器,可以运行在任何平台环境,以.shade文件(自身包含的或通过调用参数传入的如KoreBuild)为执行脚本对asp.net core项目进行编译,而KoreBuild是辅助Sake进行编译的工具。

以上有错误的地方还望指出。

相关资料:

作者:B.it
出处:http://www.cnblogs.com/ImBit/p/5307762.html 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

.NET跨平台之Sake和KoreBuild的更多相关文章

  1. 初识ASP.NET 5中的Sake与KoreBuild

    从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...

  2. ASP.NET 5中的Sake与KoreBuild

    初识ASP.NET 5中的Sake与KoreBuild   从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命 ...

  3. .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序

    在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...

  4. .NET Core 首例 Office 开源跨平台组件(NPOI Core)

    前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...

  5. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  6. Mono为何能跨平台?聊聊CIL(MSIL)

    前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...

  7. TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)

    使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...

  8. 开源一个跨平台运行的服务插件 - TaskCore.MainForm

    本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Main ...

  9. Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...

随机推荐

  1. 玩转JavaScript OOP[3]——彻底理解继承和原型链

    概述 上一篇我们介绍了通过构造函数和原型可以实现JavaScript中的“类”,由于构造函数和函数的原型都是对象,所以JavaScript的“类”本质上也是对象.这一篇我们将介绍JavaScript中 ...

  2. upload4j安全、高效、易用的java http文件上传框架

    简介 upload4j是一款轻量级http文件上传框架,使用简单,实现高效,功能专一,摆脱传统http文件上传框架的繁琐. upload4j的诞生并不是为了解决所有上传需求,而是专注于基础通用需求. ...

  3. 跟我一起数据挖掘(21)——redis

    什么是Redis Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  4. 【VC++技术杂谈002】打印技术之获取及设置系统默认打印机

    本文主要介绍如何获取以及设置系统的默认打印机. 1.获取系统中的所有打印机 获取系统中的所有打印机可以使用EnumPrinters()函数,该函数可以枚举全部的本地.网络打印机信息.其函数原型为: B ...

  5. Java接口总结

    接口的定义: 使用interface来定义一个接口.接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成,定义接口的基本语法如下: [修饰符] interfac ...

  6. Chrome开发者工具不完全指南(一、基础功能篇)

    就算你不是一名前端开发工程师,相信你也不会对Chrome浏览器感到陌生.根据最新的一份(2015/06)的浏览器市场占有率报告,Chrome近乎占有浏览器天下的半壁江山.简单.快捷使它成为了新时代人们 ...

  7. 使用Hexo搭建专属Blog

    喜欢折腾的自己最开始在博客园有仿写几篇Blog,虽也可以自己改变风格,可是到底不是独立的一块儿地方,要知道独立的才是自己的;有属于自己独立的域名和Blog,真真是一件很爽的存在.在各种大牛的分享下在G ...

  8. Atitit xml命名空间机制

    Atitit xml命名空间机制 命名冲突1 使用前缀来避免命名冲突2 使用命名空间(Namespaces)2 XML Namespace (xmlns) 属性2 默认的命名空间(Default Na ...

  9. C#设计模式-外观模式

    在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ”门面“模 ...

  10. Jser 设计模式系列之面向对象 - 接口封装与继承

    GOF在<设计模式>中说到:面向接口编程,而非面向实现编程 鉴于此,这个概念可见一斑! JS却不像其他面向对象的高级语言(C#,Java,C++等)拥有内建的接口机制,以确定一组对象和另一 ...