在處理tAPI(Terraria(如果您不知道遊戲,只是查看它,很棒)修改API)時,我們遇到了問題與跨模塊代碼引用。基本上,你可以調用其他mod的方法(只要你告訴mod生成器顯然添加對那個mod的引用),但是當你嘗試重新加載mod時,你不能確定東西會工作:if你引用其他MOD中的任何職業,它總是會使用裝載遊戲的FIRST版本,而不是最新版本。這意味着你不能調用任何靜態或實例化來自其他mod的類,當你在處理某種API時,這是一個真正的問題。我可以強制C#/ .NET使用最新版本的程序集
mods本身就是標準的C#代碼,有一些額外的JSON數據我們解析。
我想這樣做的TAPI源代碼之外同樣的事情,這是我取它(長碼,告訴pastebin.com爲永不過期雖然貼):http://pastebin.com/hjY57xJh
它具有完全相同的問題雖然。第二次調用靜態方法時,它應該打印「456」,而不是「123」。
所以,我的問題是:我能做任何事情來迫使遊戲使用最新的程序集而不是第一個?
我們考慮過使用AppDomains,但他們實施起來很痛苦,據我所知,他們通過序列化數據來工作,這可能會使遊戲由於必須進行的調用而顯得無法播放到MODS。
編輯:我真的不介意這個事實,該組件仍然用完「重新加載」mods後的內存。我只是想在「重新加載」之後新的程序集優先於舊的程序集。
如果您強烈要求籤名,您可能會在尋找[程序集重定向](http://www.bing.com/search?q=c%23+assembly+redirect+config)。你也可能想閱讀加載程序集和上下文/版本 - [Suzanne Cook的博客](http://www.bing.com/search?q=c%23+assembly+load+suzanne+cook)是一個好開始。多個AppDomain是不太可能的答案,因爲大多數API不能很好地跨越這種邊界。 –
程序集重定向似乎是僅在實際應用程序執行之前纔可用的功能,我不認爲有應用程序已經運行時實際使用它的方法。 – Shockah
現在問題的前半部分(將相同程序集的多個版本加載到單個AppDomain中)與SO(搜索)上的許多類似帖子相同;第二部分(重新指向新程序集的父API)需要更多的細節,最明顯的實現是定製版本感知代理,它將一方面與API協同工作,另一方面與您想要的任何版本的程序集綁定。 –