だから私はしばらくこれを行う方法を探していましたが、何かを見つけるたびに別の問題につながります.
基本的に、私はゲーム機を持っています。コンソールは、C# コードのスニペットを実行します。コンパイルされたアセンブリは、コンソールが現在のアセンブリのすべての型を認識し、それらを操作できるように、現在のアセンブリのフレンドである必要があります。
問題 1: コンソール コマンドを実行するたびに、新しいアセンブリが生成されます (誰かが方法を知っている場合はこれを避けたいと思います)。それをフレンド アセンブリにするためには、最後のアセンブリと同じ名前を付ける必要があります。残念ながら、以前のアセンブリをアンロードできないため、新しいアセンブリで上書きすることはできません。これにより、AppDomains を使用せざるを得なくなりました。
問題 2: 各アセンブリで個別の AppDomain を使用し、最後のアセンブリをアンロードすると動作しますが、現在の AppDomain のオブジェクトは MarshalByRef から派生していないため操作できません。スクリプトはそれらをシリアライズしようとします。私は AppDomains が好きではありません。
したがって、最も簡単な方法は、同じ AppDomain に別の名前でアセンブリを生成し、実行時に何らかの形でフレンド アセンブリとして設定することだと考えました。
これは不可能かもしれないので、他の代替手段は歓迎します。
編集:より明確にするために。スクリプトは、メイン/親アセンブリの内部にアクセスする必要があります。その逆ではありません。コードを再利用可能にしたいので、メイン アセンブリですべてを公開することはできません。