web-dev-qa-db-ja.com

アプリケーションレベルを超えてallowDefinition = 'MachineToApplication'として登録されたセクションを使用するとエラーが発生する

アプリケーションレベルを超えてallowDefinition = 'MachineToApplication'として登録されているセクションを使用するとエラーになります。

私の/ portal /ディレクトリの私のすべてのaspxページの一番上の行にこのエラーメッセージがあります、そして私はそれが一般的なものであることを知っています。私はこのエラーメッセージを最後までグーグルで書きました、そしてIISで/ portal /フォルダをアプリケーションとして設定するように指示する多くの投稿を見ましたネストされたweb.configs(ただし、どの投稿も解決策に向けたガイダンスを提供していません)。

私の設定では、私は自分のルートディレクトリにweb.configがあり、それから/ portal /ディレクトリに会社のポータルを作成しようとしています。/portal /ディレクトリには独自の(必要な)web.configがあります。

私のweb.configの50行目はこんな感じです:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

だから私はdomain.com/web.configとdomain.com/portal/web.config ...を持っている...だから私のdomain.com/portal/default.aspxページはロードされません。

これに対する本当の解決策は何ですか?どういうわけか私のルートのweb.configを私の/ portal /ディレクトリのweb.configとマージする方法を見つけますか、それとも私はここから出発しますか?

任意のガイダンスは大歓迎です!

173
Jason Weber

背景情報だけです。 ASP.NET Webサイトの構成情報は、1つ以上のWeb.configファイルで定義されています。構成設定は階層的に適用されます。 Webサーバー上のすべてのWebサイトのベースライン構成情報を記載した「グローバル」なWeb.configファイルがあります。このファイルは%WINDIR%\Microsoft.Net\Framework\version\CONFIGフォルダにあります。 WebサイトのルートフォルダにWeb.configファイルを置くこともできます。このWeb.configファイルは、「グローバル」Web.configファイルで定義されている設定を上書きしたり、新しい設定を追加したりできます。さらに、Web.configファイルをWebサイトのサブフォルダに配置して、新しい構成設定を定義したり、Web.configファイルで定義した構成設定を階層の上位に上書きしたりすることもできます。

Web.configの特定の構成要素は、アプリケーションレベルを超えて定義することはできません。つまり、「グローバル」Web.configファイルまたはWebサイトのルートフォルダーのWeb.configファイルで定義する必要があります。 <authentication>要素はその一例です。上記のエラーメッセージは、アプリケーションレベルを超えて定義できないこれらの構成要素のいずれかを含むWeb.configファイルがWebサイトのサブフォルダーの1つにあることを示しています。

出典: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

2つの考えられるアプローチを正しく識別しました。

1 - あなたの2番目のweb.configの内容に応じて、そしてあなたの設定が許すなら(すなわち同じ認証方法) - トップのweb.configにグローバルに定義されるべきである<authentication>設定とその他の要素を追加します

2 - web.configの内容をマージできない場合は、このリンクのアーカイブリンクに含まれる手順に従って、サブフォルダーをIIS内のWebアプリケーションに変換できるはずです。元のリンクは機能していません。 ( archived を参照)これが役に立つことを願っています。

200
benni_mac_b

その価値があるので、「allowDefinition = 'MachineToApplication'として登録されたセクションをアプリケーションレベルを超えて使用するのはエラーです」というエラーを受け取りました。そして、\ myWebApp\obj\Debugディレクトリと\ myWebApp\obj\Releaseディレクトリをクリアして解決しました。また、デフォルトのスタートアップページを設定する必要がありました。しかし、その後アプリは正常に起動しました。 HTH.

58
Aaronius

RY4Nが上記のように、問題を引き起こすのは必ずしもプロジェクトフォルダのweb.configではありません。場合によっては、Debugプロファイルの下でビルドを実行すると、問題のプロジェクトのDebugフォルダーに残骸が残ることがあります。ここにはweb.configファイルが含まれていることが多く、その後Releaseプロファイルでビルドを実行すると、上記のエラーが発生します。

ここで私にはたらく解決策はプロジェクトディレクトリの下で前のビルドが作成したDebugフォルダ全体を削除することです。

57
Matthew Brown

これは私の自宅のコンピュータでも起きていましたが、リリース構成でBuild Viewsを有効にして、リリース構成を構築したときだけでした。そうでなければ起こりませんでした。

Build Viewsオプションはとても素晴らしいですが、私はそれを無効にすることにしました。なぜなら、この "エラー"は常にポップアップしてしまい、アプリを実行できなくなるからです。

21
Lord of Scripts

言うだけ

アップグレードした場合(例2008 - > 2010)プロジェクトVisual Studio新しいソリューションに追加されるプロジェクトソリューションにバックアップを作成します(許可している場合)。古いWebconfigは、上記で指摘したエラーが発生する可能性がある場所です。

"Webサイトのサブフォルダの1つにあるWeb.configファイルに、アプリケーションレベルを超えて定義できないこれらの構成要素の1つがあります。" @ benni_mac_b

解決方法:このシナリオでは、プロジェクトとソリューションからバックアップフォルダを削除するだけです。

12
RY4N

私はこれが起こるもう一つの考えられる理由を思い付きました。

私は古いWebアプリケーションを2.0で構築しました。私はそれを4.5のソリューションに移行しました。

アプリケーションは、Visual Studioの内部では正常に構築およびデバッグされましたが、Webアプリケーションを公開しようとすると、このエラーが繰り返し発生しました。

私は、web.configファイルのBuild Actionが、 "Content"ではなく "Embedded Resource"であることが最終的に問題であることを発見しました。また、[コピー先の出力ディレクトリ]が[コピーしない]ではなく[常にコピーする]に設定されていました。これらの設定がいつ行われたかはわかりませんが、2.0バージョンのアプリケーションには戻ってきたと思います。

Web.configファイルの設定を変更することで、Visual Studio 2012パブリケーションの[公開]アクションを完璧に機能させることができました。

11
Tim C

MVCプロジェクトでも同じ問題がありました。公開しようとしたときにエラーが発生しました。 objフォルダは空(または少なくともweb.configを含まない)でなければなりません。

Cleanを実行しても私にはうまくいきませんでした。

私はどんなビルドの前にもobjフォルダをきれいにすることで問題を解決しました(私の場合、プロジェクトのビルドはそれほど長くはかかりません)。

プロジェクトをアンロードし、BeforeBuildターゲットに以下を追加しました

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

お役に立てれば

10
Rik

「allowDefinition = 'MachineToApplication'として登録されたセクションをアプリケーションレベルを超えて使用するとエラーになります。このエラーは、仮想ディレクトリがIISでアプリケーションとして構成されていないことが原因で発生する可能性があります。」

私はVS.NETでこの問題を抱えていました。私がいくつかの設定変換を設定していたとき、私は誤ってWeb.configファイルのプロパティを「常にコピー」に設定していたことがわかりました。通常、変換ファイルを「常にコピー」に設定しますが、web.configルートファイルは「コピーしない」のままにします。

Web.configのプロパティを変更すると、ネストしているすべての変換も変更されるため、注意してください。

だから、修正するには:

1)web.configを "コピーしない"に変更します

2)オプションで、もしあなたが設定変換を使っているなら、それらを "常にコピー"に設定してください。

3)ソリューションからobjフォルダとbinフォルダを削除します(これらは表示されない場合があるので、ソリューションエクスプローラでプロジェクトノードを選択し、[すべてのファイルを表示]ツールバーボタンをクリックします。

4)公開

私のために働きました。

6
ben

このエラーは、アプリケーションの公開中にのみ発生しました。

Web.config(および変換)ファイルのプロパティは、次のように設定されています。

  • Build Action - None
  • Copy to Output - Always

解決策は、設定を次のように変更することでした。

  • Build Action - Content
  • Copy to Output - Do not Copy
5
Hugo

削除および仮想ディレクトリを再度作成します。右クリックして仮想ディレクトリを "アプリケーション"に変換します。

4
sudhAnsu63

私もこの問題を抱えており、私のサイトをWebに公開するためにPublishing Wizardを使用した後に発生しました。

詳しく調べた後、私はConnect Webサイトでこのバグレポートに出くわした アプリケーションレベル

あるMSの担当者が回答し、またこれが公開時に発生した問題である理由を説明しただけでなく、一時的な回避策を含めてこの問題を解決しました。

ソリューションエクスプローラーからWeb.configファイルをクリックして変更します。

出力ディレクトリにコピー=コピーしない

3
nPcomp

これは別の理由です - あなたがあなた自身のサブフォルダの1つにあなたの全体のウェブアプリをコピーするならば、あなたはこのエラーを受けるでしょう。あるマシンから別のマシンにコピーするとき、私はこれを古いサイトにすることに成功しました - ちょうど2年のギャップとエラーが発生した後にサイトを見るように頼まれました。私は複数の設定ファイルを持っていなかったので - 考え出すのにかなりのビットを取りました。

1

Windowsスタート - >サイトを開く - > IIS - >あなたのサイトを右クリック - > Webサイトの管理 - >詳細設定 - >物理パスの閲覧 - >現在選択されているサブフォルダを選択してみてください。

ロジックは、サブフォルダ内のWeb設定ファイルが変更しようとしており、これは許可されていないため、選択したフォルダにする必要があります。 http://scottonwriting.net/sowblog/archive/ 2010/02/17/163375.aspx

1
Subodh Pradhan

私にとっては、objフォルダがWebサイトフォルダの下にあり、異なる設定を構築した後に複数のweb.configが表示されたためです。私はWebサイトからobjフォルダを移動することでvs2012の下で問題を解決しました。これを行うために、Webサイトのプロジェクトファイル内のすべての設定に手動で(メモ帳で)$(SolutionDir)\ Obj\$(Configuration)を追加しました。

1

私はこの問題を抱えていて、古いアセンブリなどの私の解決策を掃除することによって解決しました。

vs:Build> Clean Solutionから

その後再構築します。

1
kennydust

私は私が私がこのひどい間違いを得ることを出版している間私が問題を得ないサイトを造るなら私が私がサイトを出版する時に同じ問題を抱えていた:

「allowDefinition = 'MachineToApplication'として登録されたセクションをアプリケーションレベルを超えて使用するとエラーになります。このエラーは、仮想ディレクトリがIISでアプリケーションとして構成されていないことが原因で発生する可能性があります」

私はこの投稿でここに述べられていることをすべて試してみましたが、私が役立ったのは私が使っていたものとまったく同じ新しいパブリッシュプロファイルを作成することでした。新しいプロファイルではなく、古いプロファイルで行います。違いが何であるかわかりませんが、少なくとも私のMVCプロジェクトを公開することができます。

これが誰かに役立つことを願っています!

1
FabianVal

localhostでは問題ありませんでしたが、サーバー上でリリースを公開したとき、私は数ページで同じエラーを始めました。それから私はソリューションをクリーンアップして再構築して公開し、物事は修正されました。

0
Baqer Naqvi

サブWebサイトをWebサイトに配置しようとすると、このエラーが表示されます。

解決策は次のとおりです。

  1. profilemembershiproleManager、サブWeb.config内のsessionState
  2. 次のように認証を「なし」に変更します。<authentication mode="None" />
  3. サブフォルダを右クリック - > [アプリケーションの追加]をクリックし、IISに移動します。
  4. この問題を解決するにはIISをリセットしてください。

他の問題が発生した場合、私にpingを送ることを躊躇しないでください。多分私は手助けをするでしょう。

0
Trung

私の間違いは、Webサーバー上の別のフォルダーにweb.configを誤ってコピーペーストしたことです

0
krilovich

あなたのローカルサイトへのアクセスの罠に陥ってはいけないことを確認してくださいlocalchost/mysite.test(mysite.test)で間違っているとエラーになります。

あなたがlocalhost/dir_nameのようなあなたのサイトにアクセスするとき、この場合、あなたのweb.confはrootレベル以下に落ちます、そしてそれ故にこのエラーです。

0
Hammad Khan

私はアプリを移行していましたが、アプリには複数のアプリ(複数のweb.config)がありました。IISに移動し、サブフォルダを右クリックして[アプリケーションに変換]をクリックするとうまくいきました。

0
sojim2

時には、簡単な答えが最善です。プロジェクトに2つのweb.configファイルがありました。メインレベルのものは私がセッションタイムアウト(この問題を引き起こした)に対処するために変更を加える必要があったところです。 RazorのViewsディレクトリには、Razorとそのビューの設定がある別の設定ファイルがありました。そこにセクションを追加していました(アプリケーションレベルではありません!)。私が2つの別々のweb.configファイルを持っていたことに気づかずに、私は明白なものを探す以外のすべてを試しました。

0
Guy Schalnat

私はこのエラーを他の誰とも違う方法で受けました:

私はvs2010からvs2012と新しいwebパブリッシュプロファイルを使ってvs2010から移行していました。

私はファイルシステムに公開するためにvs2012で新しいWeb公開プロジェクトを作成しました(私たちはこれが商用アプリです別のインストーラービルダーを持っています)そして私はIISにリンクされている既存のWebプロジェクトの中にあるフォルダーに公開していました。

これは、私がIISではなくファイルシステムにパブリッシュしていたため、パブリッシュ中にエラーが発生し、最初は私を誤解させました。

解決策は、フォルダへの発行をWebプロジェクトの外部に変更することでした。

0
JohnC

Visual Studio 2017のlocalhostでこのエラーを受け取り、Visual Studioを単純に再起動すると問題が解決しました。

私は、この問題が複数のweb.configを持っていることによっても引き起こされる可能性があることを認識しています。たとえば、サブフォルダ内にあります。別のアプリケーション用に意図的に複数のweb.configファイルがある場合は、そのディレクトリが仮想ディレクトリとして認識されていないことを確認してください。

0
Josh Harris