4〜5種類のビルド構成を持つASP.NET MVCがあります。ビルド構成を変更するたびに、 'allowDefinition =' MachineToApplication 'エラーが発生するため、Webプロジェクトのobjフォルダーを削除する必要があります。苦労しましたが、ビルド前後のイベントでフォルダーを削除することで管理しました。次に、展開パッケージを構築するためにCIを構成する必要があります。これは、objフォルダーを削除できないことを意味します。コンパイルするたびに次のmsbuildパラメーター
/ p:CreatePackageOnPublish = true/p:DeployOnBuild = true
私はエラーを受け取ります:
web.config(123):エラーASPCONFIG:アプリケーションレベルを超えてallowDefinition = 'MachineToApplication'として登録されたセクションを使用するとエラーになります。このエラーは、仮想ディレクトリがIISでアプリケーションとして構成されていないことが原因で発生する可能性があります。
私が理解している限り、問題はプロジェクトに複数の.configファイルがあることです-私たちの場合はありません。実際にいくつかのヘルプを使用して説明を見つけ、永続的な(ハックなしの)修正を見つけることができました。
編集:この質問は重複としてマークされていますが、2つのスレッドの対応する回答と原因は明らかに異なっています。このタグの意図がわからない-この質問を投稿する前に、特定の投稿を読んだことがあります。質問に回答しなかったためです。このエラーメッセージには複数の原因があります。これは「類似」ですが、間違いなく重複ではありません!
私もobjフォルダーを削除していましたが、それを必要とするビルドスクリプトと競合するようになりました。 Catch-22、次のSOリンクで受け入れられた回答を使用して、Objフォルダーの場所をC:\Temp\BUILD
に移動しました。csprojファイルごとに行う必要がありますが、素晴らしい解決策。
リンクは次のとおりです。 VisualStudio:objフォルダーを別の場所に保存する方法
プロジェクト名に変数を使用していることに注意してください。 R:\ Temp\Build\Debug\$(MSBuildProjectName)
クラスプロジェクトを含むすべてのプロジェクトのデバッグセクションとリリースセクションの両方に上記の行があります。私のビルドパスは、速度を上げるためのRAMドライブです。こちらをご覧くださいSO詳細については: csprojファイル内のマクロ変数にアクセスする方法?
同様の question がここにありますSOこの問題に対するいくつかの良い解決策があります。
問題は、展開パッケージを構築すると、/ objのサブフォルダーにweb.configのコピーが作成されることです。通常、再構築またはクリーンアップを行うと、これは消去されます。ただし、1つの構成(例:デバッグ)で展開パッケージをビルドしてから別の構成(例:リリース)に切り替えると、obj/Debugフォルダーが消去されず、そこにあるweb.configファイルが問題を引き起こします。
簡単な解決策は、all構成をクリーンアップしてから(再)ビルドすることです。または、プロジェクトの/ objフォルダーを削除することもできます。問題を永続的に解決するには、中間出力(/ obj)をプロジェクトフォルダーから移動するか、プロジェクトを変更して、再構築時にすべての構成を強制的に削除します。
Visual Studio Premium 2012(VSの以前のバージョンでは発生しなかった)で見つけることができる理由もなく、私の複数のプロジェクトで開始するように見えたので、「公式」修正があることを知りません。
他の人が言ったように、objディレクトリの削除を自動化する回避策として、この投稿のユーザーCasualによる答えに似ています VisualStudio:objフォルダを別の場所に保存する方法 objフォルダーの場所が常に機能するとは限りませんでした。
代わりに、ビルド前のイベントコマンドラインのビルドイベントの下にいくつかのコマンドを追加しました。
rd "$(ProjectDir)obj" /S /Q
md "$(ProjectDir)obj"
md "$(ProjectDir)obj\Debug"
md "$(ProjectDir)obj\Release"
BuildConfigNameが使用しているビルド構成の名前と一致する行を使用して、カスタムビルド構成に一致するサブフォルダーを変更/追加/削除できます。
md "$(ProjectDir)obj\buildConfigName"
お役に立てれば!
同じエラーが発生しましたが、ページがデプロイされていました。その後、何らかの理由でWebサーバーのクロックが2010に戻されたことに気付きました。正しい日付に設定して問題を解決してください
このエラーは、アプリケーションとして定義されていないIISツリーレベルでアプリケーション固有の何かを試みていることを示しています。たとえば、Webでアプリケーションレベルの機能を実行しようとした場合仮想ディレクトリに.configがあると、そのエラーが発生します。展開先のパスを見つけて、IISアプリケーションまたはフォルダーまたはvdirとして定義されていることを確認する必要があります。
ソリューションのクリーニング(VSで[ソリューション]を右クリック、クリーニング)がうまくいきました。
私はやや似たような問題があります、私は常にコピーとしてメイン設定を持っていたので、それは設定をbinディレクトリにコピーしました。メインプロジェクトを再公開すると、MachineToApplicationエラーが発生しました。したがって、私の解決策は、構成をコピー禁止に変更し、binフォルダーの余分な構成を削除することでした。
ヒント1:クリーニングしてから再構築します。
ヒント2:VSを閉じて再度開きます。
ヒント3:ダウンロードしたプロジェクトは別のサブフォルダ内にある可能性があります... .netファイルがあるフォルダを開きます。
c:/ demo1/demo /(すべてのファイル)
デモをvs1から開く必要があります... demo1ではありません。
プロジェクトのクリーンアップ/ objフォルダーを削除します(おそらくパブリッシュとデプロイを使用しますか?-バグがあります)
受け入れられた答えの中で、ある方法で問題が説明され解決されたので、他の場合により良い解決策を示したかった。このソリューションはVSの一部のバージョンに含まれていますが、VS 2013 Update 5で問題が発生したとしか言えません(下記の"注意"を参照してください。私の特定の場合にのみ機能しません)。
Error:allowDefinition = 'MachineToApplication'からVisual Studio Connectのアプリケーションレベルを超えるソリューションを借りました。
ソリューションは、これらの行をWebアプリケーションプロジェクト(.csproj
file)オフサイド中間ファイルの削除を処理します(中間ファイルが必要であるため、受け入れられた回答の解決策ではありません):
<!--Deal with http://connect.Microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level,
we will need to clean up our temp folder before MVC project starts the pre-compile-->
<PropertyGroup>
<_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews>
</PropertyGroup>
<Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews">
<ItemGroup>
<_PublishTempFolderNamesToCleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge" />
</ItemGroup>
<!--Force msbuild to expand all the wildcard characters so to get real file paths-->
<CreateItem Include="@(_PublishTempFolderNamesToCleanup->'$(BaseIntermediateOutputPath)**\%(identity)\**\*')">
<Output TaskParameter="Include" ItemName="_EvaluatedPublishTempFolderNamesToCleanup" />
</CreateItem>
<Delete Files="@(_EvaluatedPublishTempFolderNamesToCleanup)" />
</Target>
注意:何らかの理由で、おそらくプロジェクトに自分自身を含めたため、ビューをビルドするためのビルドターゲットは"BuildViews"
、 の代わりに "MvcBuildViews"
なので、それに応じてBeforeTargets
属性を変更する必要がありました。
これは必ずしもまったく同じ問題ではなく、正直なところ、おそらく私の側の純粋な知識不足に至るまでですが、次の場合はこの同じエラーが発生しました。
問題は、WCF RESTプロジェクト(#2)をメインプロジェクト(#1)のサブディレクトリとして追加し、もちろんプロジェクトをクリーンアップしてもビルドしようとしたことです。また、同じポートまたは何かを使用しているときに問題があると思ったため、両方のプロジェクトでIISexpressを使用するようにしました。
もちろん、ビルドプロセスでは、#1のweb.configが確認され、次に別のweb.config#2。のサブディレクトリが確認されました。
これはおそらく非常に基本的な理解gotchaである必要があることを認識しており、しばらく前に私を見つけました疼痛!
おそらく朝のコーヒーを飲んだことのない人に役立つかもしれません。