0

これが機能する唯一のもののようです:

  • .cs ファイルが App_Code 内にある場合...
    • 拡張メソッドは含まれません。ビルド アクションを「コンパイル」に設定します。そうしないと、プロジェクト内の他のソース コードがその存在を認識しません。
    • 拡張メソッドが含まれています。ビルド アクションを「なし」に設定します。そうしないと、と の間でへの参照x.Fooが曖昧であるというエラーが発生します。MyExtensions.FooMyExtensions.Foo
  • .cs ファイルが App_Code の外の Helpers というフォルダー内にある場合、拡張メソッドが含まれているかどうかに関係なく、ビルド アクションを "Compile" に設定する必要があります。

この振る舞いがわかりません。ASP.NET MVC に App_Code に対する特別な権限が含まれているかどうかはわかりませんでしたが、含まれているように見えます... ただし、ビルド アクションが「なし」に設定?? 誰か説明してください。

4

1 に答える 1

0

Web サイト プロジェクトではなく、Web アプリケーション プロジェクトを作成したと仮定しています。ASP.NET アプリケーションの App_Code フォルダーは特別です。コードをドロップして、Web サイトでコンパイルできるように設計されています。このため、プロジェクト アイテムは、Visual Studio によってコンパイルされないように、"なし" としてマークされます。Web サイト プロジェクトをホスト環境に発行すると、コード ファイル自体が App_Code フォルダーにコピーされ、ASP.NET ランタイムによって別のアセンブリにコンパイルされます。

ここで、MVC Web アプリケーションを作成するときは、それが Web サイト プロジェクトと同じプロジェクト タイプではないことに注意する必要があります。MVC Web アプリケーションは、/bin ディレクトリ内のアセンブリにローカルでコンパイルされます。コードを含むプロジェクトに App_Code フォルダーを追加し、[ビルドの種類] を [コンパイル] に変更すると、次の理由で問題が発生します。

  1. MVC アプリケーションがコンパイルされ、 MyExtensions.Foo タイプが含まれており、
  2. ASP.NET は、MyExtensions.Foo タイプもある App_Code フォルダーをコンパイルしています。

App_Code の使用を避けることをお勧めします。私はより簡潔なプロジェクト構造を好むので、そうしない傾向があります。コード用に Models フォルダーを使用するか、他のフォルダーを作成します.....

本当に App_Code フォルダーを使用したい場合は、ファイルのビルド アクションを "コンテンツ" としてマークして、サイトの公開時に出力ディレクトリに確実にコピーされるようにすることをお勧めします。

于 2010-07-04T17:55:40.520 に答える