2

プラグインを動的にコンパイルできるように、ASP.NET MVC プロジェクトに App_Code ディレクトリを追加しました。

新しいプラグインを開発するときに、App_Code ディレクトリ内のクラスでインテリセンスが得られないことは、わずかな不満です。

現在、プロジェクト内の別のディレクトリにそれらを作成してから、それらを App_Code にコピーしています。

これを回避する方法はありますか?

[アップデート]

以下に「回答」を掲載しました。技術的には、これは私自身の仕様に基づいて質問に答えます。プラグインの作成にツール (つまり、IntelliSense) の使用は必要ありません。ただし、これにより、App_Code を使用せずに動的にコンパイルされたプラグイン フレームワークを実現するにはどうすればよいかという疑問が生じました。この質問は元の質問とはかなり異なるため、個別に提起します。

4

4 に答える 4

6

プロパティのファイル「ビルドアクション」を「コンパイル」から「コンテンツ」に変更してみてください。次に、WebSite のようにコンパイルされます。以下の記事で説明しています。

http://vishaljoshi.blogspot.co.uk/2009/07/appcode-folder-doesnt-work-with-web.html

于 2012-09-18T15:36:01.967 に答える
3

ASP.NET MVC は、Web サイトとは対照的に、Web アプリケーション プロジェクトを使用します。Web アプリケーション プロジェクトをコンパイルする必要があります。ディレクトリは、このApp_Codeようなアプリケーション タイプでは意味がありません。

于 2010-03-16T18:58:57.393 に答える
0

答えがあります。少なくともMVC3の場合。ソリューションをソリューションとして開かないでください。ローカル IIS から Web サイトとして開きます (そのように実行すると仮定します)。次に、動的な app_code コードが IntelliSense で表示されます。ただし、外部にある他のコード ライブラリを参照することはできません。そのためのソリューションとして、スタジオとオープニングの別のインスタンスが必要になります。

于 2012-04-19T16:11:07.550 に答える
0

設計時に 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 の使用は本当に悪いのでしょうか?

于 2010-03-23T21:19:17.993 に答える