ASP.Netエラー:「タイプ 'foo'は、「temp1.dll」と「temp2.​​dll」の両方に存在します」


108

Webアプリケーションプロジェクトを実行しているときに、一見ランダムな時間にページがCS0433エラーで失敗することがあります。複数のDLLにタイプが存在します。DLLはすべて、 "Temporary ASP.NET Files"ディレクトリにある生成されたDLLです。

回答:


135

web.configファイルの "compilation"要素にbatch = "false"属性を追加します。

この問題は、ASP.NET 2.0がアプリケーション参照とアプリケーションのフォルダー構造を使用してアプリケーションをコンパイルする方法が原因で発生します。アプリケーションのweb.configファイルの要素のバッチプロパティがtrueに設定されている場合、ASP.NET 2.0はアプリケーションの各フォルダーを個別のアセンブリにコンパイルします。

http://www.sellsbrothers.com/1995

http://support.microsoft.com/kb/919284


男、それをありがとう。今日、本番サイトでこれを修正するために奮闘していました。何が原因なのかまだわからない(長い間問題なく動作していた!)が、これで問題が解決した。
マット

ありがとう。これは機能します。今朝、このエラーで目が覚めました。私のISP discountasp.netは、何かを変更したに違いありません。この投稿がない場合でも、エラーが発生します。私のISPには賛成です。
デイモン

3
役に立つ答え-構文はここにあります:<compilation ... batch = "false" />
Catto

1
この警告に注意してください:「この方法は小さなアプリケーションにのみ推奨されます...これはメモリの断片化を引き起こします。」
ThatMatthew

22

これは、.csファイルをApp_Codeに配置し、それらのビルドアクションをWebアプリケーションプロジェクトでコンパイルするように変更した場合に発生する可能性があります。

App_Code内の.csファイルのビルドアクションをコンテンツとして持つか、App_Codeの名前を別の名前に変更します。intellisenseはコンテンツとしてマークされた.csファイルを修正しないため、名前を変更しました。

詳しくはhttp://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.htmlをご覧ください


11

このエラーの一つの可能な理由は、彼らの中に同じ名前を持つている2つのaspxページがあるということであるinherits=には、<@page language=......inherits=>行が。

inherits=名前を変更するとエラーが解決します。


2
これで私の問題は解決しました。ユーザー操作のコピー/貼り付けは、コードビハインドが必要ない場合は少し注意が必要です。
Grubsnik 2013

8

誰かが私の問題を共有している場合に備えて、新しく分岐したプロジェクトのWebサイトを公開しようとしたときにこのエラーが発生し、ビルドは完全に機能しました。

公開設定->プリコンパイルの構成のにある[プリコンパイル済みサイトを更新可能する]チェックボックスを削除するのを忘れていたことがわかりました


4

別のデータポイントとして、ベンの回答のリンクに記載されているように循環参照の形跡がなく、この問題が発生しました。私のWebサイトプロジェクトの構築は、これらのエラーのいくつかと設定のcompilation batch="false"修正で失敗しますが、これは大規模な本番Webサイトであるため、そのルートに進みたくありませんでした。

このソリューションは、S:にマップしたD:\ svnフォルダーのサブフォルダーにありました。S:からソリューションを開くと、これらのエラーが発生しましたが、D:\ svnに直接進んでソリューションを開いた場合、エラーは発生しませんでした。

またcompilation batch="true"、web.configにあるにもかかわらず、マップされたS:ドライブからソリューションを開くと、すべての.ascxファイルが独自のアセンブリにコンパイルされることに気付きました。物理的な場所からそれを開くと、.ascxファイルがそれぞれのフォルダーのアセンブリにコンパイルされます(これが動作するbatch="true"はずです)。

奇妙な。


4

このエラーは、Webフォームのクラス名と同じクラス名を持つwsdl stub(ファイルの.csの背後にあるコード)間の競合が原因でした。

ASPXページ:ダッシュボードクラス:partiaclクラスダッシュボード

AppCode / APIServices.cs:ダッシュボードのパブリック部分クラス

エラーはWebサイトの公開時にのみ再現可能でしたが、ビルドとデバッグはエラーを通知しませんでした。


2

私の場合、プロジェクトの名前を変更していたため、dllの名前も変更されていました。新しいdllをコピーしたが、古いdllをサーバーから削除することを考えなかったとき、すぐに同じ名前のクラスのペアがたくさんできました。古くなったdllを削除すると、(原因の)トリックが実行されました。


2

これらの答えはどれもうまくいきませんでしたが、問題は解決しました。VSのパブリッシュ機能を使用してWebアプリケーションをデプロイしていたため、パブリッシュする前に既存のファイルをすべて削除するオプションを選択しましたパブリッシュウィザードでパブリッシュました。これにより、アプリケーションのクリーンコピーが強制され、すべてが正常に機能しました。

このソリューションは、ローカルのデバッグ用コピーは正常に機能するが、公開されたシステムが機能しない場合に役立ちます。時間をかけて個別のdllを追跡して削除したくない場合や、最初に削除される本番ファイルを気にしない場合も素晴らしいです。


2

私の場合、ソリューションのすべてのプロジェクトのbinフォルダーからすべての出力アセンブリを削除すると、問題が解決しました。残念ながら、それについての説明はありません。


1

私の場合、クラス名が重複しているDesigner.csファイルを編集したときに問題は解決しました。何らかの理由で、クラスの名前を「logout」から「logout2」に変更した場合、デザイナーファイルでは自動的に変更されず、「logout」のままであり、このクラス名はプロジェクトのプリコンパイル済みdllにすでに存在します(私が協力して開発しているサードパーティのウェブアプリに)。


エラーメッセージを表示する新しい方法を思いついた場合は、遠慮なく追加してください:)
Ben Fulton

1

aspxページの一部を別のユーザーコントロールに配置すると、この問題が発生しました。私のマシンではすべてが問題なく、サーバーでエラーが発生しました。

問題のあるクラスとファイルの名前を変更しました。

http://support.microsoft.com/kb/919284方法2:可能な循環参照について書き込んでいるアプリケーションのフォルダーを並べ替えます


1

これらの解決策はどれも私にとってうまくいきませんでした。競合するDLLは両方ともC:\ ... \ AppData \ ... \ Temporary ASP.NET Files \ ...にありました

問題は、同じソリューション内のあるプロジェクトから別のプロジェクトにタイプを移動する前に、ソースリポジトリを以前のバージョンにロールバックしたことです。

msbuildで識別された「一時ASP.NETファイル」の場所から、新しいコードDLL(古いコードベースにはまったくないはずのはずです)を削除してみました。msbuildはそれを元に戻します。

ここで一部が正常に使用されているweb.config設定も試しましたが、それも機能しませんでした。これを書いているとき、実際には同じソリューション内に2つのMVCプロジェクトがあり、両方にエラーがあることに気づきました。そのため、両方に設定を追加しなかったことが問題であった可能性があります。

ソースリポジトリをロールフォワードしてクリーニングし、再度ロールバックしてクリーニングしてみました。何もない。

「Temporary ASP.NET Files」の場所をすべて削除してみました。msbuildはそれを元に戻します。

最後に、Visual Studioで再構築を試みました。コマンドライン出力と "エラー"出力の両方で同じmsbuild "Temporary ASP.NET Files"エラーが発生しましたが、Intellisenseエラー-競合するタイプの上にカーソルを置くと-出力ディレクトリのDLLについて実際に問題がありました。どうやら「クリーン」と「再構築」は彼らの仕事をしていない。Intellisenseによって識別された出力ディレクトリ内のDLLを手動で削除し、問題は解決しました。

tl; dr-すべてのweb.configsをバッチ設定でカバーしていることを確認し、Intellisenseを活用してさらに手がかりを見つけてください。


1

私の問題は、プロジェクトフォルダーで生成された.dllにリンクされていました。

別のファイルを参照している場合、上記のすべてを行う代わりに、私の問題を即座に修正するには、プロジェクトの/ binディレクトリ内に残っていた.dllを削除するだけでした。

問題は必ずしもweb.configの修正ではなく、解決する必要がある循環参照です。元のプロジェクトファイルの古い.dllをクリアしましたが、それを参照しているプロジェクトはクリアしていません。

web.configファイルに変更を加えることはお勧めしません。これは単なるバンドエイドの修正であり、実際の問題に実際に対処するものではないためです。問題を修正したくない場合は、それを行いますが、将来の頭痛を避けたい場合は、両方の場所から.dllを削除してください。


1

2つの異なるプロジェクトに同じ名前の部分クラスがありました。1つのプロジェクトに残すだけで解決しました。


0

ソリューションを削除して再度作成すると役立つ場合があります。この使用はVS2005からvs2010に変換したときに発生するため、フレームワーク4.0(アップグレード後)への一部の参照がソリューションに残っているため、すべてのプロジェクトが3.5として定義されています。

通常、ソリューションを再構築すると、これらの問題が解決するはずです。


0

コンパイルサーバーでアプリケーションをコンパイルしているときにも同じ問題が発生しました。

私のコントローラーには単純な静的コードがあったため、ascxを変更しました。

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

 <%@ Control Language="C#" AutoEventWireup="true" Src="controllerName.ascx.cs" Inherits="Controls.controllerName" %>

また、分離コードからpartialキーワードを削除し、分離コードに名前空間を追加しました。

この:

using System;
using System.Web.UI;

/// <summary>
/// My controller
/// </summary>
public partial class controllerName: UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

これに:

using System;
using System.Web.UI;

namespace Controles
{
    /// <summary>
    /// My controller
    /// </summary>
    public class controllerName : UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

そしてそれは私のために働いた。


0

私にとってこれは、サイトのルートフォルダーもあった現在のディレクトリにPrecompiledWeb / Publishの場所を設定したときに発生しました。

私のWebサイトは、コンパイル/ビルド時にプロジェクトの一部として公開フォルダーを表示し、その方法で重複を見つけていました。

つまり、サイトの公開済み/コンパイル済みバージョンをサイトのコードフォルダーに配置しないでください。



0

私の解決策を投稿する:

この問題は、Mcafee Antivirusの「オンアクセススキャン」に関連しています。これを無効にすることで問題は解決しました。どういうわけか、アンチウイルスがオンのとき、ASPはASP一時フォルダを適切に使用していませんでした。

これが誰かを助けることを願っています。


理由をご存知ですか?私のチームにもこの問題があり、マカフィーが原因であると彼らは言っていますが、企業のITルールに基づいて、アンチウイルスを無効にすることはできません(干渉しないはずです!)。
Kat Lim Ruiz

正確な原因の究明に取り組んでいます。残念ながら、オンアクセススキャンからASP一時フォルダーを除外しても、問題は解決されません。
エイドリアンNasui


0

参照の追加に移動し、両方のdllを検索します。異なるバージョンのあいまいさを持つ同じdllへの参照が生成されるため、両方のdllがオンになっているはずです。


0

私の解決策は、.aspxファイルのCodePage = "...."をCodeBehind = "..."に置き換えることでした。以前の.NETバージョンからの移行中に、どういうわけかそれはCodePageとして残されました。このページディレクティブは、プロジェクトのdllファイルと競合する別のdllファイルを作成します。


0

この解決策はどれも私にとってうまくいきませんでした。「リリース」モードでのコンパイルは機能しましたが、「デバッグ」に切り替えると、このエラーメッセージが大量に表示されました。

理由はわかりませんが、Visual Studioを再起動するだけで解決できました。


0

コンパイル時に問題に直面しました。

私はbatch = "true"属性に同意します。エラーは2つのアセンブリが存在することを示しています

解決策1: それらの1つを削除する

解決策2:そのうちの1つを構成する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.