103

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

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

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

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

これはViewsフォルダーのWeb.Configと関係があるのではないかと思いますが、それでは、以前に一度ビルドした後でないとどうでしょうか。ちなみに、アプリは公開されると正常に動作します。

4

10 に答える 10

76

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

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

<BaseIntermediateOutputPath>[SomeKnownLocationIHaveAccessTo]</BaseIntermediateOutputPath>

そして、そのフォルダーをプロジェクトのフォルダーに含まないようにします。私のために働きます。これは完璧な解決策ではありませんが、今のところは良い方法です。プロジェクトフォルダからパッケージフォルダ(obj\Debugおよび/またはobj\Releaseフォルダ内にあります)を必ず削除してください。そうしないと、エラーが発生し続けます。

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

于 2010-05-19T05:06:12.467 に答える
40

obj / Debugフォルダーからすべてを削除したところ、このエラーが修正されました。これは私がに去ることを可能にしました

<MvcBuildViews>true</MvcBuildViews>

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

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

于 2010-10-22T16:04:19.950 に答える
26

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

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

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

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'" DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(MSBuildProjectDirectory)" />
</Target>
于 2011-04-07T17:53:11.850 に答える
24

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

もう1つの修正は、<AspNetCompiler>を呼び出す直前に公開出力を削除することです。.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.configと、\objの下のすべてのPackageTmpフォルダーが削除されます。

于 2013-02-09T19:37:16.560 に答える
4

Web Publishを使用している場合は、とを設定できますMvcBuildViews=falsePrecompileBeforePublish=trueこれは、一時フォルダーへのコピー後(公開/パッケージ化の直前)にプリコンパイルされます。

注:PrecompileBeforePublish「新しい」Webパブリッシングパイプラインスタック(VS2010 SP1 + AzureSDKまたはVS2012RTM)でのみサポートされます。VS2010 RTMを使用している場合は、別の方法の1つを使用する必要があります。

于 2012-11-22T03:16:12.323 に答える
3

jrummellによる解決策については、次のように設定します。

DependsOnTargets="CleanWebsitesPackage;CleanWebsitesPackageTempDir;CleanWebsitesTransformParametersFiles;"

VS 2010では機能しますが、 VS2012では機能しません。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

于 2012-10-12T09:50:00.697 に答える
3

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

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

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

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

于 2013-02-06T05:46:34.490 に答える
1

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

<MvcBuildViews>true</MvcBuildViews>

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

于 2010-04-23T18:29:43.453 に答える
0

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

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

Visual Studio Connectのアプリケーションレベルを超えて、エラー:allowDefinition='MachineToApplication'からソリューションを借用しました。

解決策は、これらの行をWebアプリケーションプロジェクト(.csprojファイル)に含めることで構成されます。このプロジェクトは、問題のある中間ファイルの削除を処理します。

<!--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>
于 2016-10-21T11:24:18.730 に答える
0

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

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

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

于 2016-12-30T06:53:11.960 に答える