OneByOne/Game.cs
(开头部分) 6KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using OneByOne.API;
using System.Reflection;
using System.Text.Json;
namespace OneByOne
{
internal class Game
{
private static IEnumerable<IPlugin> LoadPlugins(string pluginDirectory)
{
var dir = new DirectoryInfo(pluginDirectory);
dir.Create();
//FileInfo[] op = dir.GetFiles("*.plugin.dll");
foreach (var file in dir.GetFiles("*.plugin1.dll"))
{
Console.WriteLine($"正在加载插件 {file.Name} ……");
IPlugin result;
try
{
var assembly = Assembly.LoadFile(file.FullName);
var infoName = assembly.GetManifestResourceNames()
.Where(name => name.EndsWith("PluginInfo.json")).FirstOrDefault(string.Empty);
var info = assembly.GetManifestResourceStream(infoName);
if (info is null)
{
Console.WriteLine($"加载插件 {file.Name} 失败。已跳过。");
continue;
}
var pInfo = JsonSerializer.Deserialize<PluginInfoModel>(info);
if (pInfo is null || pInfo.Main is null)
{
Console.WriteLine($"加载插件 {file.Name} 失败。已跳过。");
continue;
}
var pType = assembly.GetType(pInfo.Main, false);
var constructor = pType?.GetConstructor(Array.Empty<Type>());
var plugin = constructor?.Invoke(null);
if (plugin is not IPlugin p)
{
Console.WriteLine($"加载插件 {file.Name} 失败。已跳过。");
continue;
}
result = p;
}
catch (Exception e)
{
Console.WriteLine($"加载插件 {file.Name} 时产生了异常:");
Console.WriteLine(e);
Console.WriteLine($"已跳过插件 {file.Name} 的加载。");
continue;
}
yield return result;
}
}
public Game()
{
后面还有 100 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。