私はプラグイン システムを作成しました。プラグイン ホストは、各モジュールがどの「usings」を持っているかを知る必要があります。
主なアイデアは、プラグインがコードで使用できるものを制限して、そのセキュリティ レベルを評価することです。例: プラグインはディスクまたはネットワークを操作できないため、'usings' またはロードされた dll による制限を考えています。
プラグインの「ロードされたモジュール」を取得する方法を検索しましたが、System.IO または役立つ dll の参照が見つかりませんでした。
次に、assembly.Get***() (モジュール/フィールド/...) を調べます
多分 axemple が役立つかもしれません: Plugin 'A' EntryPoint.cs
using System.Collections.Generic; <--- is allowed
using System.IO; <--- it is not allowed
using System.Net; <--- it is not allowed
.... Declare a namsespace, classes and other... AND i used a streamwriter
プラグインが System.Net またはその他の禁止された参照を使用しているかどうかを知る必要があります。
ありがとう(すべての可能性に感謝します)
編集: 1) Assembly.GetReferencedAssemblies は機能しません。一部の DLL には許可された参照と禁止された参照があります
2) ディスク/ネットワーク アクセスは、このアクセスを管理する「ヘルプ ライブラリ」を使用して行うことができます。
3) サンドボックス ソリューション: 私はこれを見ましたが、主な質問は、仮想ディスクのようなものがあるということです。ユーザーがディレクトリを一覧表示するように要求すると、この操作はサーバーに「このユーザーがこのフォルダーに持っているファイルは何ですか?」と尋ねます。次に、このサーバーはデータベース内のすべてのファイルを収集し、このリストを返します。ファイルを読み書きする必要がある場合、この変更を同期する必要があります。このファイルを読み取ることができる他のすべてのコンピューターと。ネットワーク操作は、一連の「仮想パートナー」に固有のものですが、完全な VPN ソリューションはありません。