Skip to content

1242509682/AutoCompile

Repository files navigation

AutoCompile 自动编译插件

  • 作者: 羽学
  • 出处: 无
  • 这是一个Tshock服务器插件,主要用于:将CSharp代码放入【自动编译】=>【源码】文件夹内使用/cs by指令将源码编译成可允许的Dll插件,可将依赖项放入到【程序集】文件夹自动引用。

更新日志

v1.0.6
加入了脚本服务接口用于解决:
1.处理多插件引用其编译功能时存在的命名空间污染问题
2.使每个插件对脚本编译独立化,让对接的插件编写更轻松
优化了信息输出排版,支持进度形的百分比完成度显示
注意引用其脚本插件需要在调用插件里传参以下几个关键内容:
- 全局变量类 (辅助编写脚本用的,可以内置插件指定类和方法)
- 配置文件定义1个bool,决定是否在初始化执行器时自动开服编译
- 配置文件定义1个List<string>,专门传参这个插件的专用using避免命名空间污染
- 定义1个Assembly,内容为typeof(MonsterSpeed).Assembly 
MonsterSpeed修改为自己的命名空间,用于作为注册执行器的主键
- 定义1个string,内容为Path.Combine(TShock.SavePath, "怪物加速", "C#脚本");
把 "怪物加速"改为你自己的想指定的文件夹,用于独立指定编译的脚本目录
详细参考:[怪物加速的CSExecutor类](https://github.com/1242509682/MonsterSpeed/blob/master/CSExecutor.cs)
修复:编译DLL时当已有插件在ServerPlugins文件夹里,导致源码引用自身出现的错误。

v1.0.5
优化:不再重复编译未修改的C#脚本

v1.0.4
加入了动态编译C#脚本功能与执行器
此功能仅用于与其他插件对接时使用
优化了编译DLL的内存占用与释放
(之前每次编译DLL都会有10-20m的内存增长)

v1.0.3
移除了【智能修复】避免误伤某些命名空间导致编译失败
恢复了【移除指定using语句】配置项(比较稳妥,自己决定是否移除)

v1.0.2
优化了每次编译后可能的内存泄露
将/cs ql 改为清理“源码”文件夹
加入了编译前后的内存对比显示
移除了分组编译逻辑,避免误判报错,只允许放入同命名空间的单插件源码进行编译
移除了【移除指定Using】配置项
重构编译构建逻辑,加入了智能修复(检测缺失命名空间自动移除,尝试重新编译)

v1.0.1
加入了少量的报错汉化与报错日志文件输出
加入了修复中文编码(针对于某些喜欢在switch类型添加中文指令插件)
支持指定引用系统自带的“运行时”程序集
修复了报错后不会强制GC回收内存的BUG
内嵌了更多程序集,经过上百款主流插件源码测试,除了构架太老的源码基本上都能编译通过(说的是本身源码就没错误的那些)
注意:本插件可以编译CS8-14的代码,但CS11以上无法在TShock5运行请升级TShock6
特别注意:我知道你懒,但也别把bin文件夹和obj文件夹丢进去省得报错了还怪插件不行!

v1.0.0
利用Roslyn编译器实现功能,为解决没有电脑的手机服主提供便利
暂时不支持内嵌文件的插件源码(没做相关适配,但插件生成出来是可用的,就是没内嵌文件)
需要统一所有CS源码命名空间
自动补充引用TShock和OTAPI的DLL
额外引用程序集放入到【程序集】文件夹
编译后的DLL自动放入到【编译输出】文件夹
主要指令只有一个,其他的没什么用:/cs by

指令

语法 别名 权限 说明
/cs compile.use 菜单指令
/cs on或者off compile.use compile.use 开启或关闭插件功能
/cs by /cs 编译 compile.use 编译所有CS源码为DLL
/cs ql /cs 清理 compile.use 清理“源码”文件夹
/cs lj /cs 路径 compile.use 显示插件的所有路径
/cs pz /cs 配置 compile.use 显示当前配置项
/reload tshock.cfg.reload 重载配置文件

配置

配置文件位置:tshock/模版.json

{
  "使用说明": [
    "1. 将所有.cs文件放入[自动编译]文件夹里的[源码]文件夹",
    "2. 使用命令 /cs by 进行编译",
    "3. 生成的DLL在[自动编译]文件夹里的[编译输出]文件夹",
    "【配置项说明】",
    "启用: 开关插件功能",
    "包含子目录: 是否扫描[源码]子目录中的.cs文件",
    "语言版本: C#语言版本(CSharp8-CSharp14)",
    "最大文件数: 单次编译最多处理文件数",
    "最大大小MB: 所有.cs文件总大小限制",
    "默认添加引用: 为所有cs文件添加默认引用(已存在则不添加,只需写命名空间自动添加using)",
    "移除using语句:自动移除已存在的using语句",
    "注意:暂时不支持内嵌资源的插件生成"
  ],
  "启用": true,
  "包含子目录": true,
  "编译失败日志显示英文": true,
  "编译失败日志显示中文": true,
  "成功后清失败日志文件": true,
  "语言版本": "CSharp11",
  "最大文件数": 100,
  "最大大小MB": 50,
  "移除指定using语句": [
    "Steamworks",
    "System.Numerics",
    "System.Security.Policy",
    "Org.BouncyCastle.Asn1.Cmp",
    "Org.BouncyCastle.Asn1.X509",
    "NuGet.Protocol.Plugins",
    "Org.BouncyCastle.Math.EC.ECCurve",
    "using static Org.BouncyCastle.Math.EC.ECCurve;",
    "using static MonoMod.InlineRT.MonoModRule;"
  ],
  "默认给源码添加引用": [
    "System",
    "System.Collections",
    "System.Collections.Generic",
    "System.Linq",
    "System.Text",
    "System.Threading",
    "System.Threading.Tasks",
    "System.IO",
    "System.IO.Streams",
    "System.IO.Compression",
    "System.Reflection",
    "System.Diagnostics",
    "System.Globalization",
    "System.Security",
    "System.Security.Cryptography",
    "System.Net",
    "System.Net.Http",
    "System.Runtime.CompilerServices",
    "System.Runtime.InteropServices",
    "Microsoft.Xna.Framework"
  ],
  "系统程序集": [
    "System.dll",
    "System.Web.dll",
    "System.Web.HttpUtility.dll",
    "System.Net.dll",
    "System.Net.Http.dll",
    "System.Net.Requests.dll",
    "System.Net.Primitives.dll",
    "System.Private.CoreLib.dll",
    "System.Private.Uri.dll",
    "System.Runtime.dll",
    "netstandard.dll",
    "System.Core.dll",
    "System.Private.Xml.Linq.dll",
    "System.Diagnostics.TraceSource.dll",
    "System.Collections.dll",
    "System.Collections.Concurrent.dll",
    "System.Collections.Immutable.dll",
    "System.Linq.dll",
    "System.Linq.Expressions.dll",
    "System.Linq.Queryable.dll",
    "System.IO.dll",
    "System.IO.FileSystem.dll",
    "System.IO.FileSystem.Primitives.dll",
    "System.IO.Compression.dll",
    "System.IO.Compression.ZipFile.dll",
    "System.Text.Json.dll",
    "System.Text.RegularExpressions.dll",
    "System.Text.Encoding.dll",
    "System.Text.Encoding.Extensions.dll",
    "System.Threading.dll",
    "System.Threading.Tasks.dll",
    "System.Threading.Tasks.Extensions.dll",
    "System.Threading.Thread.dll",
    "System.Threading.ThreadPool.dll",
    "System.Runtime.Extensions.dll",
    "System.Runtime.InteropServices.dll",
    "System.Runtime.CompilerServices.Unsafe.dll",
    "System.Runtime.Numerics.dll",
    "System.ComponentModel.dll",
    "System.ComponentModel.Primitives.dll",
    "System.ComponentModel.TypeConverter.dll",
    "System.Xml.ReaderWriter.dll",
    "System.Memory.dll",
    "System.Buffers.dll",
    "System.Numerics.Vectors.dll",
    "System.Reflection.dll",
    "System.Reflection.Primitives.dll",
    "System.Reflection.Extensions.dll",
    "System.Reflection.Metadata.dll",
    "System.Reflection.TypeExtensions.dll",
    "System.ObjectModel.dll",
    "System.Globalization.dll",
    "System.Diagnostics.Debug.dll",
    "System.Diagnostics.Tools.dll",
    "System.Diagnostics.Tracing.dll",
    "System.Diagnostics.Process.dll",
    "System.AppContext.dll",
    "System.Console.dll",
    "System.Security.Cryptography.Algorithms.dll",
    "System.Security.Cryptography.Primitives.dll",
    "System.Security.Principal.dll"
  ]
}

反馈

About

这是一个Tshock服务器插件,主要用于:讲CSharp代码放入【自动编译】=>【源码】文件夹内使用/cs by指令将源码编译成可允许的Dll插件,可将依赖项放入到【程序集】文件夹自动引用。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages