元の製品バージョン: Visual C++
元の KB 番号: 2028526
まとめ
Microsoft Visual Studio を使用して ASP.NET プロジェクトをビルドすると、次のようなエラー メッセージがランダムに表示されることがあります。
コンパイラ エラー メッセージ: CS0433: 型 'ASP.summary_common_controls_notes_ascx' は'c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def の両方に存在します 8910\App_Web_msftx123.dll' および 'c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\Book_Details\abc12345\def8910\App_Web_msfty456.dll'
説明: この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。 次の具体的なエラーの詳細を確認し、ソース コードを適切に変更してください。
ソース エラー: 行 100: </div>
行 101: <h3 class="entry">新しいメモ</h3>
行 102: <bni:details id="details" runat="server" />
行 103: <span class="RedZone">1450</span>
104 行目: <p>Summary.</p>
ソース ファイル: d:\http\post\publisher\default.aspx 行: 102
このエラーが発生する可能性がある一般的なシナリオについては、次のセクションで説明します。
シナリオ 1: 同じ bin フォルダー内の 2 つのアセンブリ
説明: このエラーの一般的な原因は、2 つのクラス定義を含むが、同じクラス名を持つ 2 つのアセンブリが同じ Web アプリケーション の bin フォルダーにある場合です。 これは、複数のDefault.aspxが 1 つのアセンブリにコンパイルされた場合に発生する可能性があります。 通常、これは、マスター ページ (Default.master) と既定の ASPX ページ (Default.aspx) の両方が_Default クラスを宣言するときに発生します。
解決策: マスター ページのクラス名を変更し (ほとんどの場合、_Defaultから)、プロジェクトをリビルドします。 クラス間の名前付けの競合を解決することが重要です。
シナリオ 2: 同じアセンブリへの複数の参照
説明: Visual Studio の参照パスは、プロジェクトで使用されるアセンブリ参照のフォルダー パスを指定するために使用されます。 パスにアセンブリが含まれており、アセンブリに同じクラス名が含まれている可能性があります。 同じアセンブリに複数の参照が追加され (バージョンまたは名前が異なる場合があります)、名前付けの競合が発生する可能性があります。
解決策: 古いバージョン参照を削除します。 Visual Studio で Web サイトを右クリックし、プロパティの References を確認します。
シナリオ 3: 既定のアクセス許可の変更
説明: 既定では、ASP.NET Web アプリケーションがコンパイルされると、コンパイルされたコードは一時 ASP.NET ファイル フォルダーに配置されます。 既定では、ASP.NET ローカル ユーザー アカウントにアクセス許可が付与されます。 このアカウントには、コンパイル済みコードにアクセスするために必要な高信頼のアクセス許可があります。 既定のアクセス許可にいくつかの変更が加えられた可能性があり、変更によってバージョン管理の競合が発生する可能性があります。 もう 1 つの可能性は、ウイルス対策ソフトウェアによってアセンブリが誤ってロックされる可能性があるということです。
解決策: すべてのコンテンツの一時 ASP.NET ファイル フォルダをクリアします。
シナリオ 4: バッチ コンパイル
説明: web.config ファイル内のバッチ属性が True に設定されている場合、ファイルに初めてアクセスするときに必要なコンパイルによる遅延を排除します。 ASP.NET は、コンパイルされていないすべてのファイルをバッチ モードでプリコンパイルします。 このバッチ モードでは、ファイルが初めてコンパイルされると遅延が発生します。
バッチ属性を False に設定すると、アプリケーションに存在するが報告されないマスクされたコンパイル エラーが公開される場合があります。 さらに重要なのは、1 つのアセンブリではなく、個々の .aspx/.ascx ファイルを個別のアセンブリに動的にコンパイルするように ASP.NET に指示することです。
解決策: web.config の <compilation> セクションで batch=False を設定します。このアクションは、一時的なソリューションと見なす必要があります。 コンパイル セクションの Batch=False は、Visual Studio のアプリケーションのビルド時間に大きなパフォーマンス影響を与えます。
シナリオ 5: web.config の編集で AppDomain が再起動する
説明: ASP.NET アプリケーションの web.config ファイルを変更するか、bin フォルダー内のファイルを変更すると (追加、削除、名前変更など)、AppDomain が再起動します。 これらのアクションが発生すると、すべてのセッション状態が失われ、キャッシュされた項目は Web サイトの再起動時にキャッシュから削除されます。 この問題は、Web アプリケーションの一貫性のない状態が原因である可能性があります。
解決策: web.config ファイルをタッチ (編集) して AppDomain の再起動をトリガーします。
シナリオ 6: 変更されたソース コードがまだ動的に再コンパイルされていない
説明: ソース コードは App_Code フォルダーに格納でき、コードは実行時に自動的にコンパイルされます。 結果のアセンブリには、Web アプリケーション内の他のコードからアクセスできます。 したがって、App_Code フォルダーは Bin フォルダーとよく似ていますが、コンパイル済みコードではなくソース コードを格納できる点が異なります。 ソース ファイルに変更が加えられると、クラスが再コンパイルされます。 古いアセンブリが原因で競合が発生した場合、強制的に再コンパイルすると問題が解決する可能性があります。
解決策: Bin フォルダーまたはApp_Code フォルダー内のファイルにタッチして、完全な再コンパイルをトリガーします。