所以我一直在寻找一种方法来做到这一点,每次我发现一些东西,都会导致不同的问题。
基本上,我有一个游戏机。控制台运行 C# 代码片段。编译的程序集需要是当前程序集的朋友,以便控制台知道当前程序集中的所有类型并可以操作它们。
问题一:每次运行控制台命令时,都会生成一个新程序集(如果有人知道怎么做,我很乐意避免这种情况),并且要成为朋友程序集,它需要与上一个程序集具有相同的名称。不幸的是,您无法卸载以前的程序集,因此新程序集无法覆盖它。这迫使我使用 AppDomains。
问题二:如果我让每个程序集使用单独的 AppDomain,然后卸载最后一个程序集,它可以工作,但我无法从当前 AppDomain 操作对象,因为它们不是从 MarshalByRef 派生的,所以当我将它们作为参数传递给它尝试序列化它们的脚本。我不喜欢 AppDomains。
所以我认为最简单的方法是在同一个 AppDomain 中生成具有不同名称的程序集,并在运行时以某种方式将它们设置为友元程序集。
我确实意识到这可能是不可能的,因此欢迎任何其他选择。
编辑:为了更清楚。脚本需要访问主/父程序集内部。不是反过来。我无法在主程序集中公开所有内容,因为我希望代码可重用。