您现在的位置是:网站首页> 编程资料编程资料

开源跨平台运行服务插件TaskCore.MainForm_实用技巧_

2023-05-24 301人已围观

简介 开源跨平台运行服务插件TaskCore.MainForm_实用技巧_

本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.MainForm改良成跨平台的服务共大家使用和相互交流;本来这篇应该分享的是nginx+iis+redis+Task.MainForm构建分布式架构后续文章,但使用.netcore来定义一个服务插件和跨平台测试经过让我既兴奋又头痛,不说了下次再分享分布式后续文章吧;那么开始今天的分享内容,希望各位多多支持:

. 框架结构介绍及运行效果图

. 如何生成nuget包和使用开源框架TaskCore.MainForm

. win7和ubuntu16.04运行TaskCore.MainForm的两种方式和测试截图(也可认为.netcore项目在win7和ubuntu系统运行的两种方式)

. 框架代码解读及感悟

下面一步一个脚印的来分享:

. 框架结构介绍及运行效果图

首先,咋们先来认识下项目源码的工程目录结构如图:

结构看上去应该够清晰了,源码文件量也很少,不过的确实现了动态加载程序集dll来执行任务,后面会给出相应的执行截图,我们再来看下TaskCore.MainForm项目通过vs2015生成之后Bin文件夹中的文件如图:

如果安装了.netcore sdk的话在windows上您只需要上面截图的文件就能运行插件了;再来我们在已经安装过core sdk的win7系统上执行一下如下命令dotnet TaskCore.MainForm.dll就能看到如图的效果:

没错这就是插件运行起来的效果图,因为.netcore现目前暂时没有提供类似于winform那样的皮肤界面效果,所有只能通过命令行来做跨平台运行程序

. 如何生成nuget包和使用TaskCore.MainForm

首先,我们要明确服务是由两部分构成(TaskCore.MainForm和TaskCore.Plugin);TaskCore.MainForm主要用来运行程序,TaskCore.Plugin用来作为子任务需要继承的父类插件;当我们下载TaskCore.MainForm运行包之后(如图2结构),我们还需要做的就是继承TaskCore.Plugin.dl中的TPlugin这个类,来重写自己的任务内容,因此我们新建一个项目取名为:TaskCore.Test,再来我们通过vs2015引用功能直接添加TaskCore.MainForm运行包中的TaskCore.Plugin.dl引用,这个时候会提示一个错误:

错误意思是没法加载netcore版本的dll,因此这种直接在vs项目中引用方式添加dll依赖不行,需要通过nuget来添加依赖包(.netcore对类库的引用目前只能通过nuget来安装依赖,这个需要注意),所以我这里把TaskCore.Plugin项目通过dotnet pack命令来生成nuget包,然后以便我TaskCore.Test项目中来使用;

如何生成nuget包(win7系统dotnet命令来生成包的过程和下载):

直接在vs中右键您需要打包的类库项目-》选择"在资源管理器中打开文件夹"-》这样就到了您类库的根目录,然后退到类库根目录的上一级文件夹中-》按住键盘”shift"键并同时鼠标右键要打包类库的项目文件件(我这里是TaskCore.Plugin文件夹)-》选择“在此处打开命令窗体” 这个时候就进入了cmd命令窗体,当然有些朋友直接喜欢直接先cmd再来找对应的磁盘,反正我觉得第一种更快点(不同人不同选择吧),下面看下操作截图:

由上图可以看到,通过命令生成了nupkg文件,这文件就是咋们需要在项目中下载安装的TaskCore.Plugin插件包;接下来我们来在TaskCore.Test项目中安装这个插件如下步奏,右键TaskCore.Plugin项目中的“引用”-》选择“管理nuget程序包”-》然后选择右上角的这个图标

-》选择“Nuget包管理器”-》“程序包源”-》

-》然后选择新创建的包源,下面设置如图

这里的“源(S)”指定的本地路径就是刚才我们生成的nupkg文件文件的磁盘(当然我这里是吧刚才pack命令生成的文件复制到了MyNugPackage文件夹中方便测试)-》然后点击”确定“按钮-》然后在返回到

选择我们的包源MyNugPackage-》再浏览这里就能看到我们创建的nuget包了

-》选择并安装-》好安装好后我们可以查看“引用”下面有了如下变化

并且project.json文件中自动添加了依赖项:

好了到我们的TaskCore.Test项目中就可以使用Task.Plugin包里面的方法很类等信息了;

使用TaskCore.MainForm:

由上面的操作TaskCore.Test项目已经安装了Task.Plugin包,那么我们在项目中分别创建3个子类并继承自Task.Plugin包的父类TPlugin并重写方法TPlugin_Load(),对应文件名称分别为:BlogsObj.cs,BlogsObj01.cs,BlogsObj02.cs,分别添加入下代码内容:

BlogsObj.cs:

 namespace TaskCore.Test { // This project can output the Class library as a NuGet Package. // To enable this option, right-click on the project and select the Properties menu item. In the Build tab select "Produce outputs on build". public class BlogsObj : TPlugin { public BlogsObj() { } public override void TPlugin_Load() { var sbLog = new StringBuilder(string.Empty); try { sbLog.Append($"这里是BlogsObj,获取配置文件:{this.XmlConfig.Name}"); //代码块 // new WriteLog()._WriteLog($"{DateTime.Now}测试引用nuget包"); } catch (Exception ex) { sbLog.Append($"异常信息:{ex.Message}"); } finally { PublicClass._WriteLog(sbLog.ToString(), this.XmlConfig.Name); } } } } 

BlogsObj01.cs:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TaskCore.Plugin; namespace TaskCore.Test { // This project can output the Class library as a NuGet Package. // To enable this option, right-click on the project and select the Properties menu item. In the Build tab select "Produce outputs on build". public class BlogsObj01 : TPlugin { public BlogsObj01() { } public override void TPlugin_Load() { var sbLog = new StringBuilder(string.Empty); try { sbLog.Append($"这里是BlogsObj01,获取配置文件:{this.XmlConfig.Name}"); //代码块 // } catch (Exception ex) { sbLog.Append($"异常信息:{ex.Message}"); } finally { //Console.WriteLine($"这里是Blogs,获取配置文件:{this.XmlConfig.Name}"); PublicClass._WriteLog(sbLog.ToString(), this.XmlConfig.Name); } } } } 

BlogsObj02.cs:

 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using TaskCore.Plugin; namespace TaskCore.Test { // This project can output the Class library as a NuGet Package. // To enable this option, right-click on the project and select the Properties menu item. In the Build tab select "Produce outputs on build". public class BlogsObj02 : TPlugin { public BlogsObj02() { } public override void TPlugin_Load() { //Console.WriteLine($"这里是Blogs,获取配置文件:{this.XmlConfig.Name}"); PublicClass._WriteLog($"这里是BlogsObj02,获取配置文件:{this.XmlConfig.Name}", this.XmlConfig.Name); } } } 

好了测试代码写完,咋们生成一下,然后把这个TaskCore.Test.dll拷贝到TaskCore.MainForm运行包中,还需要在PluginXml文件夹中分别创建继承TPlugin的子类的配置文件对应的截图如(注:这里xml配置文件名称必须和子类名称一样):

配置文件内容如BlogsObj.xml:

1获取博客信息0获取博客信息神牛步行3

最后在CrossFiles.xml配置文件中添加TaskCore.Test.dll文件名称如:

TaskCore.Test.dll

好了完成了,我们在windows开发环境上运行看下效果图:

到这里我们来简单总结下怎么使用TaskCore.MainForm插件,在自己项目中安装TaskCore.Plugin的nuget包-》重写父类TPlugin的TPlugin_Load()方法-》生成自己的项目,拷贝项目的dll到TaskCore.MainForm运行包中-》在运行包中PluginXml文件夹中增加任务子类相同类名的xml文件并配置如上的配置信息-》增加CrossFiles.xml中的任务dll文件配置-》使用命令dotnet TaskCore.MainForm.dll运行服务插件,挺简单的吧

. win7和ubuntu16.04运行TaskCore.MainForm的两种方式和测试截图(也可认为.netcore项目在win7和ubuntu系统运行的两种方式)

由于环境影响,这里跨平台运行测试我只测试win7和ubuntu16.04,其他系统的发布测试希望朋友们在使用过程中得到结果告知我下谢谢;先来讲在win7中运行:

1. 安装了netcore sdk环境的发布运行

安装了sdk后直接可以在cmd命令中dotnet TaskCore.MainForm.dll来运行服务,开篇上面讲解的示例都是在安装了sdk后的截图,服务运行所需要的文件如图:

就只有这些文件(当然程序需要的某些平台依赖项使用的是安装的sdk中的文件,所以看起来很少实际应该包含netcore sdk里面的文件才能运行),通过命令运行的效果图:

2. 未安装netcore sdk环境的发布运行

在为安装sdk平台上系统上运行才是重点,这样才可以说是跨平台;首先,为了更好看效果我们复制一份如图的两个文件到TaskCore.MainForm01文件夹中:

没错,只需要这两个文件,然后我们需要修改project.json文件的内容如下注释的地方:

 { "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": { //"type": "platform", 跨平台发布需要注释 "version": "1.0.0" }, "System.IO.FileSystem": "4.0.1", "System.Reflection": "4.1.0", "System.Text.Encoding.CodePages": "4.0.1", "System.Threading.Timer": "4.0.1", "System.Xml.XDocument": "4.0.11", "TaskCore.Plugin": "1.0.0" }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" } }, //跨平台发布需要添加如下节点 "runtimes": { "ubuntu.16.04-x64": { }, //运行在ubuntu.16.04的64位系统 "win7-x64": { } //运行在win7的64位系统 } } 

然后使用cmd分别录入并回车运行指令dotnet restore此时TaskCore.MainForm01文件夹中会自动生成一个project.lock.json文件(大家注意看下),然后再录入指令dotnet publish -r win7-x64,可以看到命令窗信息如:

就表示成功了,并且有返回生成运行文件的路径,我们按照路径找到生成的文件publish文件夹,里面没有PluginXml配置文件夹和配置文件和测试项目TaskCore.Test.dll,我们为了方便直接复制上面配置好的配置文件到publish文件夹中如下截图就是生成的发布文件:

没错TaskCore.MainForm01.exe这个就是自动生成的运行文件,然后我们双击运行效果图:

运行成功了,有朋友会问您之前系统不是安装了sdk么,这种测试能算么,我想说的是这个我通过QQ发给qq群里面的朋友@南宫亦琦(不要怪我贴出了您的昵称)测试过了,她没有安装过sdk的;

ubuntu16.04运行:

1. 安装了netcore sdk环境的发布运行

首先,我们需要把在win7上生成的项目复制到ubuntu系统磁盘中(我们使用上面配置好的TaskCore.MainForm包),我这里采用共享目录的方式把文件拷贝到ubuntu系统磁盘上,如图:

提示: 本文由整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!

-六神源码网