設計時に App_Code から MVC Web アプリ アセンブリのコードを参照できる可能性は低いようです。これは、Visual Studio の Web アプリケーション プロジェクトの性質であり、App_Code ディレクトリ内のコードが別のアセンブリにコンパイルされているためだと思います。
最初の質問で、動的コンパイル機能があるため、App_Code を使用したいと説明しました。私の拡張性の要件について考えると、インテリセンスが機能しないという事実は問題ではありません。プラグインを開発するのに IDE は必要ないということです。Visual Studio を開いて開発する場合は、クラスライブラリを使用するだけです。
プラグイン アーキテクチャについて考えると、プラグインを定義するという概念 ( http://weblogs.asp.net/justin_rogers/articles/61042.aspx ) に問題はなく、特定のディレクトリにプラグインを自動で読み込むことができます。 :
var assemblies = new List<Assembly>();
var di = new System.IO.DirectoryInfo(Server.MapPath("~/Plugins"));
di.GetFiles("*.dll").ToList().ForEach(x => {
assemblies.Add(Assembly.LoadFrom(x.FullName));
});
List<Plugin> ExternalPlugins =
Plugin.InitializePlugins(assemblies).ToList();
/bin を使用しない唯一の理由はパフォーマンスでした。しかし、プラグイン プロジェクトがメインの Web プロジェクトを参照していたため、ポスト ビルド イベントを使用してすべてをチェックする必要がありました。
したがって、より良い解決策は (多くの人が提案しているように)、構成ファイルを使用してプラグインを定義し、通常どおり dll をビンにドロップすることです。
しかし、これらすべての異なるアプローチで、最初の要件を回避しています。つまり、IDE を使用せず、アプリケーションを手動でコンパイルする必要なく、その場でプラグインを微調整できるようにすることです。
この場合、App_Code の使用は本当に悪いのでしょうか?