在处理tAPI(一个Terraria(如果你不了解游戏,只是查找它,它很棒)modding API)时,我们遇到了跨模式代码引用的问题。基本上,你可以从另一个mod调用方法(只要你告诉mod构建器显然添加对该mod的引用),但是当你尝试重新加载mod时,你不能确定东西会起作用:if你从其他mod引用任何类,它将始终使用加载游戏的FIRST版本,而不是最新版本。这意味着你无法调用任何静态的东西或者从其他mod中实例化这些类,这在你处理某种API mod时是一个真正的问题。
mods本身就是标准的C#代码,我们解析了一些额外的JSON数据。
我尝试在tAPI源代码之外做同样的事情,这是我对它的看法(长代码,告诉pastebin.com永不过期粘贴):http://pastebin.com/hjY57xJh
但它有完全相同的问题。第二次调用静态方法时,它应该打印“456”,而不是“123”。
所以,我的问题是:我可以做任何事情来强制游戏使用最新的程序集而不是第一个程序集吗?
我们考虑使用AppDomains,但实施起来很麻烦,据我所知,它们通过序列化数据来工作,这可能会使游戏明显无法播放,因为它需要做的调用量很大模组。
编辑:我真的不介意这样一个事实,即在“重新加载”mod之后程序集仍然耗尽内存。我只是希望在“重新加载”之后的新程序集优先于旧程序集。答案 0 :(得分:1)
我完全忘记了这个问题,但是:最后我们忽略了这个问题。 tAPI mods现在可以扩展ModBase或APIModBase。如果你正在使用后者,游戏将永远不会真正尝试重新加载mod(程序集) - 它将在第一次加载后保持不变,直到你重新开始游戏。这对于modders来说有点烦人,但是关于这个事实并没有太多可以做的事情。至少所有仅依赖于API mod的内容mod可以自由重新加载而不会引起任何问题。