回答:
web.configファイルの "compilation"要素にbatch = "false"属性を追加します。
この問題は、ASP.NET 2.0がアプリケーション参照とアプリケーションのフォルダー構造を使用してアプリケーションをコンパイルする方法が原因で発生します。アプリケーションのweb.configファイルの要素のバッチプロパティがtrueに設定されている場合、ASP.NET 2.0はアプリケーションの各フォルダーを個別のアセンブリにコンパイルします。
これは、.csファイルをApp_Codeに配置し、それらのビルドアクションをWebアプリケーションプロジェクトでコンパイルするように変更した場合に発生する可能性があります。
App_Code内の.csファイルのビルドアクションをコンテンツとして持つか、App_Codeの名前を別の名前に変更します。intellisenseはコンテンツとしてマークされた.csファイルを修正しないため、名前を変更しました。
詳しくはhttp://vishaljoshi.blogspot.se/2009/07/appcode-folder-doesnt-work-with-web.htmlをご覧ください
このエラーの一つの可能な理由は、彼らの中に同じ名前を持つている2つのaspxページがあるということであるinherits=
には、<@page language=......inherits=>
行が。
inherits=
名前を変更するとエラーが解決します。
別のデータポイントとして、ベンの回答のリンクに記載されているように循環参照の形跡がなく、この問題が発生しました。私のWebサイトプロジェクトの構築は、これらのエラーのいくつかと設定のcompilation batch="false"
修正で失敗しますが、これは大規模な本番Webサイトであるため、そのルートに進みたくありませんでした。
このソリューションは、S:にマップしたD:\ svnフォルダーのサブフォルダーにありました。S:からソリューションを開くと、これらのエラーが発生しましたが、D:\ svnに直接進んでソリューションを開いた場合、エラーは発生しませんでした。
またcompilation batch="true"
、web.configにあるにもかかわらず、マップされたS:ドライブからソリューションを開くと、すべての.ascxファイルが独自のアセンブリにコンパイルされることに気付きました。物理的な場所からそれを開くと、.ascxファイルがそれぞれのフォルダーのアセンブリにコンパイルされます(これが動作するbatch="true"
はずです)。
奇妙な。
これらの答えはどれもうまくいきませんでしたが、問題は解決しました。VSのパブリッシュ機能を使用してWebアプリケーションをデプロイしていたため、パブリッシュする前に既存のファイルをすべて削除するオプションを選択しましたパブリッシュウィザードでパブリッシュました。これにより、アプリケーションのクリーンコピーが強制され、すべてが正常に機能しました。
このソリューションは、ローカルのデバッグ用コピーは正常に機能するが、公開されたシステムが機能しない場合に役立ちます。時間をかけて個別のdllを追跡して削除したくない場合や、最初に削除される本番ファイルを気にしない場合も素晴らしいです。
私の場合、クラス名が重複しているDesigner.csファイルを編集したときに問題は解決しました。何らかの理由で、クラスの名前を「logout」から「logout2」に変更した場合、デザイナーファイルでは自動的に変更されず、「logout」のままであり、このクラス名はプロジェクトのプリコンパイル済みdllにすでに存在します(私が協力して開発しているサードパーティのウェブアプリに)。
aspxページの一部を別のユーザーコントロールに配置すると、この問題が発生しました。私のマシンではすべてが問題なく、サーバーでエラーが発生しました。
問題のあるクラスとファイルの名前を変更しました。
http://support.microsoft.com/kb/919284方法2:可能な循環参照について書き込んでいるアプリケーションのフォルダーを並べ替えます
これらの解決策はどれも私にとってうまくいきませんでした。競合する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を活用してさらに手がかりを見つけてください。
私の問題は、プロジェクトフォルダーで生成された.dllにリンクされていました。
別のファイルを参照している場合、上記のすべてを行う代わりに、私の問題を即座に修正するには、プロジェクトの/ binディレクトリ内に残っていた.dllを削除するだけでした。
問題は必ずしもweb.configの修正ではなく、解決する必要がある循環参照です。元のプロジェクトファイルの古い.dllをクリアしましたが、それを参照しているプロジェクトはクリアしていません。
web.configファイルに変更を加えることはお勧めしません。これは単なるバンドエイドの修正であり、実際の問題に実際に対処するものではないためです。問題を修正したくない場合は、それを行いますが、将来の頭痛を避けたい場合は、両方の場所から.dllを削除してください。
ソリューションを削除して再度作成すると役立つ場合があります。この使用はVS2005からvs2010に変換したときに発生するため、フレームワーク4.0(アップグレード後)への一部の参照がソリューションに残っているため、すべてのプロジェクトが3.5として定義されています。
通常、ソリューションを再構築すると、これらの問題が解決するはずです。
コンパイルサーバーでアプリケーションをコンパイルしているときにも同じ問題が発生しました。
私のコントローラーには単純な静的コードがあったため、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)
{
}
}
}
そしてそれは私のために働いた。
私にとってこれは、サイトのルートフォルダーもあった現在のディレクトリにPrecompiledWeb / Publishの場所を設定したときに発生しました。
私のWebサイトは、コンパイル/ビルド時にプロジェクトの一部として公開フォルダーを表示し、その方法で重複を見つけていました。
つまり、サイトの公開済み/コンパイル済みバージョンをサイトのコードフォルダーに配置しないでください。
私の解決策を投稿する:
この問題は、Mcafee Antivirusの「オンアクセススキャン」に関連しています。これを無効にすることで問題は解決しました。どういうわけか、アンチウイルスがオンのとき、ASPはASP一時フォルダを適切に使用していませんでした。
これが誰かを助けることを願っています。
App_Codeフォルダーが問題の原因です。クラスをフォルダーの外側に配置してください(正常に機能します)
App_CodeフォルダーはWebアプリケーションプロジェクト用に設計されていません
http://vishaljoshi.blogspot.in/2009/07/appcode-folder-doesnt-work-with-web.html
コンパイル時に問題に直面しました。
私はbatch = "true"属性に同意します。エラーは2つのアセンブリが存在することを示しています
解決策1: それらの1つを削除する
解決策2:そのうちの1つを構成する