手动构建
如果你想要抢先体验未发布的新功能,给项目做贡献,或者你需要开发插件,您可以使用源码库的代码进行手动构建并部署。
术语统一
在接下来的内容中,为了预防理解困难,再次介绍各术语和其对应的项目
- CoreAPI 、 API本体 、 sharwapi.Core :均指代 API框架本体 ,仅包含负责插件加载、路由注册等底层任务代码
- Contracts 、接口层 、Contracts.Core : 均指代 定义插件与核心框架之间通信的接口 ,插件需要实现
IApiPlugin接口,核心框架通过此接口与插件进行交互
而命令行中则统一使用Linux的文件分隔符(/)
准备步骤
为了构建项目,你需要先准备以下工具:
并且新建一个解决方案文件(.sln),命令如下
mkdir sharwapi
cd sharwapi
dotnet new sln --name sharwapi至此你的准备工作已经完成,接下来可以进行API本体(CoreAPI)的构建
API本体(CoreAPI)的代码拉取
在刚刚新建解决方案文件的目录,输入以下命令即可拉取代码
$ git clone https://github.com/sharwapi/sharwapi.Core.git$ git clone git@github.com:sharwapi/sharwapi.Core.git随后将拉取下来的源码添加到解决方案中
$ dotnet sln sharwapi.sln add sharwapi.Core/sharwapi.Core.csproj接下来你可以继续对接口层的拉取
接口层的代码拉取
接口的简短介绍
在介绍中虽然并没有介绍接口层,但是其是作为API本体(CoreAPI)与插件(Plugin)沟通的渠道。插件实现了这个接口才能被API识别到,并正常加载。API也依赖于这个接口层才能正常运行。接口层将在后续的架构一章中详细介绍
在刚刚新建的解决方案文件的目录中,输入以下命令即可拉取代码
$ git clone https://github.com/sharwapi/sharwapi.Contracts.Core.git$ git clone git@github.com:sharwapi/sharwapi.Contracts.Core.git随后将拉取下来的源码添加到解决方案中
$ dotnet sln sharwapi.sln add sharwapi.Contracts.Core/sharwapi.Contracts.Core.csproj至此,API本体(Core API)的代码拉取完毕,你可以往下开始构建,或是进入插件一节开始你的插件开发
API本体构建
在构建之前,请先确保 API本体(CoreAPI) 和 接口层(Contracts.Core) 位于你的解决方案中。
1. 发布项目
执行如下命令对 API 本体进行发布构建:
dotnet publish sharwapi.Core/sharwapi.Core.csproj -c Release2. 获取构建产物
构建完成后,你可以在 ./sharwapi.Core/bin/Release/net9.0/publish 目录中找到编译好的程序文件。
3. 运行
进入发布目录并运行 API 本体:
cd ./sharwapi.Core/bin/Release/net9.0/publish
dotnet sharwapi.Core.dll插件构建
在此使用官方提供的API Manager插件进行演示
在刚刚新建的解决方案文件的目录中,输入以下命令即可拉取插件代码
$ git clone https://github.com/sharwapi/sharwapi.Plugin.apimgr.git$ git clone git@github.com:sharwapi/sharwapi.Plugin.apimgr.git随后将拉取下来的源码添加到解决方案中
$ dotnet sln sharwapi.sln add sharwapi.Plugin.apimgr/sharwapi.Plugin.apimgr.csproj随后执行如下命令进行发布
dotnet publish sharwapi.Plugin.apimgr/sharwapi.Plugin.apimgr.csproj -c Release随后你应该能在 ./sharwapi.Plugin.apimgr/bin/Release/net9.0/publish 中看到编译出来的 sharwapi.Plugin.apimgr.dll
将编译出来的 sharwapi.Plugin.apimgr.dll 放入 ./sharwapi.Core/bin/Release/net9.0/publish/Plugins (即 API本体 目录下的 Plugins 文件夹内)
再运行 API本体 ,若看到类似下文的提示,你的插件就载入完成了
Loading plugin: {Name} {Version}