VS2010から発行するときのallowDefinition = 'MachineToApplication'エラー(ただし、以前のビルドの後のみ)


103

ローカルコンピューターで問題なくAsp.Net MVC 2アプリケーションを実行できます。ただ実行/デバッグします。

しかし、すでに作成している場合は公開できません。ソリューションをクリーンアップして、再度公開する必要があります。これはシステムクリティカルではないことは知っていますが、本当に面倒です。「ワンクリック公開」は「ソリューションをクリーンにしてからワンクリック公開」ではありません

正確なエラーは次のとおりです。

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

それはViewsフォルダーのWeb.Configに関係しているのではないかと思いますが、それでは、以前に1回ビルドした後でしか理由がありません。そして注意してください、アプリは公開された後は正常に動作します。


1
子ディレクトリに余分なweb.configがある場合は、削除してみてください。
user1154664

回答:


76

MVCアプリでも同じ問題が発生しました。ビューをチェックしたいのでイライラしました。MvcBuildViewsをオフにしたくなかったので

幸いにも私は答えをくれた投稿に出くわしました。MvcBuildViewsをtrueのままにしておくと、プロジェクトファイルの下に次の行を追加できます。

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>

そして、そのフォルダーをプロジェクトのフォルダーに含めないでください。私のために働く。それは完璧な解決策ではありませんが、今のところは良いです。必ず削除してくださいパッケージ(の内側にフォルダOBJ \デバッグおよび/またはOBJ \リリースプロジェクトフォルダからフォルダを)そうでなければ、エラーを取得しておこう。

FWIW、MSはこのエラーについて知っています ...


1
phil haackは、2010 SP1と比較し
archive

3
フィルがそのブログで持っている解決策は私にはうまくいきません。上記の解決策は私の唯一の解決策です。
ベンページ、2011年

9
objフォルダーを削除する方がはるかに簡単な解決策であり、プロジェクトファイルの変更を覚えたり維持したりするのは簡単ではないと思います。それがここでの一番の答えになるはずです。(2011年半ば現在)
RyanW

FWIW、このエントリは実際には、\objMvcBuildViewsではなく、パブリッシングの中間出力パス(パス)を変更します。違いはわずかですが、重要です。
newmanth

40

私はobj / Debugフォルダーからすべてを削除し、このエラーを修正しました。これにより、

<MvcBuildViews>true</MvcBuildViews>

プロジェクトファイルのオプション(T4MVC T4テンプレートで便利です)。

編集:これは、[ビルド]-> [ソリューションの再構築]メニューを使用するだけで、はるかに簡単に実現できます(実際の再構築では、obj / Debugフォルダーをクリアしてからソリューションを構築するためです)。


26

このエラーのためにMS Connectページでこの回避策を使用しています。AspNetCompilerを実行する前に、プロジェクト(すべての構成)の下のすべてのobjファイルとtempファイルをクリーンアップします。

プロジェクトファイルのMvcBuildViewsターゲットを変更して、Visual Studioが作成したパッケージファイルをクリーンアップするターゲットに依存するようにします。これらのターゲットは、Webアプリケーションプロジェクトに自動的に含まれます。

MvcBuildViewsターゲットが実行されるたびに、すべてのパッケージファイルが削除されます。

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'" DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(MSBuildProjectDirectory)" />
</Target>

私のために働く。次のターゲットも機能するようにコメントしました:<Target Name = "AfterBuild" Condition = "'$(MvcBuildViews)' == 'true'"> <AspNetCompiler VirtualPath = "temp" PhysicalPath = "$(ProjectDir)" /> < / Target>
kaptan

更新-MVC 3 Tools Updateでこれを修正する必要があります。haacked.com/archive/2011/05/09/…– jrummell '06
10/19

3
はい... rmdir /S /Q "$(ProjectDir)\obj"Microsoftチケットに従ってポストビルドセクションに追加すると問題が解決しました!
Leniel Maccaferri

2012では、ターゲットのCleanWebsitesPackageTempDirおよびCleanWebsitesTransformParametersFilesは存在せず、引き続きエラーが発生します。
Dave

2
@jrummell興味深いです。mvc4プロジェクトでビルドビューが有効になっているときに、このMachineToApplicationエラーが発生しています。
Dave

24

この問題は、objフォルダーにWebプロジェクト出力(テンプレート化されたweb.configまたは一時公開ファイル)がある場合に発生します。使用されるASP.NETコンパイラーは、objフォルダー内のものを無視するほどスマートではないため、代わりにエラーをスローします。

もう1つの修正は、<AspNetCompiler>を呼び出す直前にパブリッシュ出力をnukeすることです。.csprojを開き、これを変更します。

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

これに:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <ItemGroup>
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <Delete Files="@(ExtraWebConfigs)" />
  <RemoveDir Directories="@(ExtraPackageTmp)" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

これにより、\ objの下のすべてのweb.configsと、\ objの下のすべてのPackageTmpフォルダーが削除されます。


プラスワン私のすべての賛成票。私はobjフォルダにいくつかの破片を持っていました。
ta.speot.is 2014

エディタは、内部の要素<ItemGroup>が無効であると不平を言っていますが、それは無視してください-とにかく動作します。
Kjell Rilbe 2016年

うまく機能し、デバッグからリリースに構成を切り替えるたびにobjフォルダーを削除するという煩わしさから解放されます
Todd Skelton

4

Web Publishを使用している場合は、MvcBuildViews=falseおよびを設定できますPrecompileBeforePublish=true。これは、一時フォルダーへのコピー後(publish / packageの直前)にプリコンパイルされます。

注:PrecompileBeforePublish「新しい」Web公開パイプラインスタック(VS2010 SP1 + Azure SDKまたはVS2012 RTM)でのみサポートされています。VS2010 RTMを使用している場合は、代替方法のいずれかを使用する必要があります。


このソリューションがビューを構築しているのを見ません。私はわざとエラーをビューに入れ、PrecompileBeforePublish = Trueを設定しましたが、ビルドは失敗しませんでした。(私はVS2012を使用しています)
Hullah 2013年

これにより、/ p:PrecompileBeforePublish = trueでプリコンパイルしようとしたVSOビルドで作業するときに問題が解決しました
Stephen McDowell

3

jrummellによる解決策に関して、設定:

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

これは、VS 2010で動作しますが、ないVS 2012で。2012年には、次のことを行う必要があります。

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesWPPAllFilesInSingleFolder;CleanWebPublishPipelineIntermediateOutput"

ソース:

VS 2010:C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft.Web.Publishing.targets

VS 2012:C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.targets


3

私はこれが答えられたことを知っていますが、私が見つけた興味深いものを追加したかっただけです。

プロジェクトで「MvcBuildViews」をfalseに設定し、すべてのbinフォルダーとobjフォルダーを削除しても、エラーが発生しました。「MvcBuildViews」がtrueに設定されたままの「.csproj.user」ファイルがあることがわかりました。

「.csproj.user」ファイルを削除すると、すべて機能しました。

したがって、csprojファイルを変更する場合は、「。csproj.user」ファイルも変更または削除してください。


1

私にもこの問題があったため、プロジェクトのプロパティでビルド前イベントを作成して、出力ディレクトリをクリーンアップしました(${projectPath}\bin,${projectPath}\obj\${ConfigurationName})。別のプロジェクトでは、クリーニングイベントが実施されていても、このエラーが発生していました。2番目のプロジェクトでは、プロジェクトファイルにリストされているビューをコンパイルしていました。

<MvcBuildViews>true</MvcBuildViews>

私はtrueをfalseに変更しましたが、そのエラーについて不満はなくなりましたが、それでも正しく実行されました。2番目のエラーの原因が正確にわかったとは主張しませんが、少なくとも当面は前進しました。


1
ありがとうございます。ただし、展開する前に問題を修正するのに役立つため、MvcBuildViewsをFalseとしてマークすることはできません。
Dan、

0

問題は中間ファイルに関係していますが、ビューを作成する前にこれらの中間ファイルをクリーンアップするという別の解決策があります。

このソリューションは一部のバージョンのVSに含まれていますが、VS 2013 Update 5で問題があったとしか言えません(以下の「注意」を参照してください。このバージョンでは修正できますが、特定のバージョンでのみ機能するわけではありません)非標準の場合)。

Error:allowDefinition = 'MachineToApplication'の解決策をVisual Studio Connectのアプリケーションレベルを超えて借りました

解決策は.csproj、関連する中間ファイルの削除を処理するWebアプリケーションプロジェクト(ファイル)に次の行を含めることです。

<!--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応じて属性を変更する必要がありました。次のPropertyGroupように、条件を削除して単純化することにより、ターゲットも単純化しました。

  <Target Name="CleanupForBuildMvcViews" Condition="'$(MVCBuildViews)'=='true' " BeforeTargets="BuildViews">
    <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>

0

私の場合、MvcBuildViewsとPrecompileDuringPublishの両方がtrueの場合に、この問題の原因であることがわかりました。

だから私はPrecompileDuringPublishを削除しました、そしてその解決策は私のために働きました、そして私はそれ以来この問題に直面していません。

ここに画像の説明を入力してください

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