.NET跨平台之Sake和KoreBuild
最近在了解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进行编译的工具。
以上有错误的地方还望指出。
相关资料:
- Building future .NET projects is quite pleasant
- Compiling .NET Core code on Linux/OS X
- An ASP.NET vNext Build and Repo Structure Braindump
作者:B.it
出处:http://www.cnblogs.com/ImBit/p/5307762.html
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
.NET跨平台之Sake和KoreBuild的更多相关文章
- 初识ASP.NET 5中的Sake与KoreBuild
从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...
- ASP.NET 5中的Sake与KoreBuild
初识ASP.NET 5中的Sake与KoreBuild 从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- .NET Core 首例 Office 开源跨平台组件(NPOI Core)
前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- Mono为何能跨平台?聊聊CIL(MSIL)
前言: 其实小匹夫在U3D的开发中一直对U3D的跨平台能力很好奇.到底是什么原理使得U3D可以跨平台呢?后来发现了Mono的作用,并进一步了解到了CIL的存在.所以,作为一个对Unity3D跨平台能力 ...
- TinyWeb v1.0 正式完成第一个Release版本(功能基于 libuv 跨平台库)
使用方法很简单,很容易融入现有项目,使现有项目拥有Web网站功能和WebSocket,以及Socket直连! 并且包含了一个跨平台(windows/linux)工具集合; 嗯,也挺棒的^,^ 在项目中 ...
- 开源一个跨平台运行的服务插件 - TaskCore.MainForm
本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Main ...
- Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系
在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...
随机推荐
- WPF PlacementTarget技巧
<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...
- 控制Linux下 mono 服务的启动停止
当Window下的服务部署到Linux的时候,我们一般用Mono.service 来启动停止.参数比较多,不太好用.于是有个这个Shell脚本. 用法:moa s1 start #启动 ...
- Vue2.0实现1.0的搜索过滤器功能
Vue2.0删除了很多1.0的比较实用的过滤器,如filterBy,orderBy.官方文档给了通过计算属性实现1.0搜索过滤器功能,自己又加入了大小写通用检索功能,比较简单,学一下. <bod ...
- Apache-Tomcat的安装配置
现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 1.首先是Tomcat的获取和安装. 获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够. ...
- 开发该选择Blocks还是Delegates
前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中在stablekernel找到了这篇文章,文中作者不仅仅是给出了解决方案,更值得我们深思的是作者独特 ...
- SQL Server 更改跟踪(Chang Tracking)监控表数据
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(Refere ...
- LINQ系列:Linq to Object集合操作符
集合操作符对元素的集合或序列集合进行操作,并返回一个集合.LINQ共有4种集合查询操作符:Distinct.Union.Intersect和Except. 1. Distinct Distinct操作 ...
- 【Win10 应用开发】集成语音命令
记得老周以前在写WP8应用开发的文章时,曾经写过语音命令集成的文章,后来8.1的时候“小娜”问世,但考虑到其变化不大,故老周没有补写相应的文章. 今天,老周打算补一下Win 10通用应用开发中,有关语 ...
- 理解javascript中的对话框
前面的话 通常我们调试程序时,如果需要阻塞效果,则要用到alert().但除了alert()以外,window对象还提供了其他3种对话框.本文将详细介绍window对象中的对话框 定义 系统对话框与在 ...
- .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Software Protector序列号生成组件.今天就通过一篇简单的文章来预览一下其强大的功 ...