1. ホーム
  2. c#

[解決済み] CS0433 "Type 'X' already exists in both A.dll and B.dll " のエラーはどこから発生するのですか?

2023-07-15 10:39:53

質問

Visual Studio 2008 SP1 から内部 Web サーバー (IIS ではない) を使用して Web アプリを実行すると、上記のようなエラーが発生します。

エラーの全容 (ソース ファイル Default.aspx.cs ):

コンパイラーエラーメッセージ。CS0433: The タイプ 'WebApplication3.Site1' が両者に存在します。 both 'c:\WindowsMicrosoft.NETFrameworkv2.0.50727Temporary'の両方に存在します。 ASP.NET Filesroot ⇄⇄⇄Web_site1.master.cdcab7d2.muczzy9v.dll' の両方に存在します。 と 'c:\WindowsMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\80dd34ed_6968ca01\WebApplication3.DLL'

先の完全な警告です。

<ブロッククオート

警告 CS0436: タイプ 'WebApplication3._Default' in 'c:\WindowsMicrosoft.NETFrameworkv2.0.50727Temporary'にあります。 ASP.NET Filesroot ﹑App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs' にあります。 インポートされた型と競合する 'WebApplication3._Default' と競合します。 'c:\WindowsMicrosoft.NETFrameworkv2.0.50727Temporary'にインポートされたタイプ'WebApplication3._Default'と競合します。 ASP.NET Files\root\aa563bcf\59deedc0\assembly\dl3\44c3a3cf\e096e61c_6568ca01\WebApplication3.DLL'. で定義された型を使用します。 'c:\WindowsMicrosoft.NETFrameworkv2.0.50727Temporary'で定義されたタイプを使用する。 ASP.NET Filesroot ↵App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs'.

警告のソースは中間ファイルを指しています App_Web_default.aspx.cdcab7d2._tlkwdos.0.cs を参照してください。 :

Line 162:    
Line 163:    [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
Line 164:    public class default_aspx : global::WebApplication3._Default, System.Web.IHttpHandler {
Line 165:        
Line 166:        private static bool @__initialized;

そして私の質問:これはどこから来たのでしょうか?

ウェブアプリ(ウェブサイトではありません!)には、1つの Default.aspx サイト1.マスター で、依存関係はありません。これらはほとんど空で asp:Label があるのみです。以前は、このウェブアプリは問題なく動作していました。Default.aspx.cs のマスターへの参照をすべて削除すると、すべてがうまくいくようになりました。マスターはいくつかのコードだけを持っています。

このWebアプリケーションはfire-and-forgetのテスト用Webアプリケーションの1つなので、特に気にすることはありません。しかし、私は以前にこれを見たことがなく、今、新しいプロジェクトにコードをコピーすること以外に何をすべきかについて興味があります (クリーニングソリューションは役に立ちません)。

注: 私は この投稿 などは該当しません。

どのように解決するのですか?

理論編

この問題が ではなく アプリケーションのバグに起因するものではない場合 (例: クラス名の重複)。

この問題は、アプリケーションのプロジェクトに変更が加えられ、新しいビルド (たとえば、コード/参照/リソースの変更) が行われた後に発生するようです。この問題は、この新しいビルドの出力内にあるようです。さまざまな理由により、Visual Studio は 全体 の内容を置き換えません。この結果、アプリケーションの bin フォルダーの内容の少なくとも一部は古くなってしまいます。

この問題が発生した場合、quot;Temporary ASP.NET Files" フォルダーをクリアするだけでは、問題を解決できません。なぜなら、アプリケーションの bin フォルダーの古いコンテンツは、次にアプリケーションにアクセスしたときに、再び "Temporary ASP.NET Files" フォルダーにコピーされ、問題が持続してしまうからです。重要なのは、既存のファイルをすべて削除し、Visual Studio にすべてのオブジェクトを再構築させ、次にアプリケーションがアクセスされたときに新しい bin ファイルが "Temporary ASP.NET Files" フォルダーにコピーされるようにすることです。

解決方法

  1. Visual Studio を閉じる
  2. iisreset を実行します。
  3. Temporary ASP.NET Files" フォルダー内のすべてのフォルダーとファイルを削除します (パスはエラー メッセージで参照されます)。
  4. 問題のあるアプリケーションの "obj" および "bin" フォルダーを削除します。
  5. Visual Studio を再起動し、ソリューションを開きます。
  6. ソリューションのクリーンアップとソリューションの再構築を実行します。

説明

  • ステップ1-2: 削除する必要のあるフォルダー/ファイルからリソース ロックを削除します。
  • ステップ 3-4: 古いビルド ファイルをすべて削除する
  • ステップ 5-6: 新しいバージョンのビルド ファイルを作成します。