2012-10-08 6 views
5

私のAsp.Net MVC 4プロジェクトでは、ビュー<MvcBuildViews>true</MvcBuildViews>をビルドするために.csprojファイルを設定しました。allowDefinition = 'MachineToApplication'エラー設定<MvcBuildViews> true</ MvcBuildViews>

It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

私がobjフォルダが、エラーキープ調達を削除しようとしました:問題は、私はエラーを得たプロジェクトをビルドするということです。エラーは、問題が認証タグの行であることを指定します。

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 

多くの場合、私はアプリを構築して、再度実行した後、(私はエラーを得た)アプリケーションを実行して、アプリケーションを実行することができますよ。

+0

確認:http://stackoverflow.com/questions/4725387/mvcbuildviews-not-working-correctly –

答えて

1

私はカミソリの構文

を検証するためにMvcBuildViewsを有効にした後、私のWebアプリケーションを公開しようと、私は

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

はそう、それをコメントアウトしてください私のウェブの設定で、このコードを発見したとまったく同じ問題を抱えていましたコンパイラの動作は@matrixugly問題を修正します示唆して何をして

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

に変更されていませんが、また、Sにチェックをコンパイル時のビューを引き起こすことトップも同様に働く。コンパイル時にビューのエラーをチェックしたいと思っていますか?そのような場合は、以下の修正が必要です。

これらのソリューションが動作理由を理解するために、我々は最初の問題を作成する方法を知っている必要があり:

  1. 開発者は、コンパイル時のビューにチェックしたいので、彼らはMvcBuildViews=trueを設定します。
  2. プロジェクトを公開するまで、アプリケーションはうまく構築されます。コンパイル時にエラーにプロジェクトの結果を構築するための
  3. その後の試み:It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

だから何がこの問題の原因は?プロジェクトがコンパイラに公開されると、デフォルトで<project-dir>\obj\が使用され、動作するソースファイルのコピーが配置されます。残念ながら、パブリッシュが完了すると、これらのファイルは自動的に削除されません。次回、MvcBuildViews=trueでプロジェクトをコンパイルすると、<project-dir>フォルダの下にあるため、コンパイル時にaspnetコンパイラにobj\フォルダが含まれているため、エラーになります。

これをどのように修正しますか?あなたには4つのオプションがあります:

  1. セットMvcBuildViews=false私は本当にこれを解決策とは考えていません。
  2. <project-dir>\obj\のファイルを削除します。作品は出版された後に行われなければならないので、作業は面倒です。
  3. プロジェクト設定ファイルの<BaseIntermediateOutputPath>プロパティを使用して、公開ディレクトリが中間ディレクトリとして使用するパスを変更します。

    例(参考:this link):

    <BaseIntermediateOutputPath> [SomeKnownLocationIHaveAccessTo] </BaseIntermediateOutputPath>

  4. は、ビルド(参照Microsoft Connect)であなたのために問題のあるファイルを削除し、プロジェクトの設定ファイルに新しいセクションを追加します。

    <PropertyGroup> 
    <_EnableCleanOnBuildForMvcViews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true</_EnableCleanOnBuildForMvcViews> 
    </PropertyGroup> 
    <Target Name="CleanupForBuildMvcViews" Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='true' and '$(MVCBuildViews)'=='true' " BeforeTargets="MvcBuildViews"> 
    <ItemGroup> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\Package\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TransformWebConfig\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\CSAutoParameterize\**\*" /> 
        <_TempWebConfigToDelete Include="$(BaseIntermediateOutputPath)**\TempPE\**\*" /> 
    </ItemGroup> 
    
    <Delete Files="@(_TempWebConfigToDelete)"/> 
    </Target> 
    

私の推薦は、いずれかのオプションを使用することです3または4

N.B.:私もちょうどコピー&ペースト、あなたのためにそれは簡単に作りましたプロジェクトファイルを編集したことがない人は、ロード中に編集することはできません。それを右クリックしてUnload Projectを選択すると、最初にアンロードする必要があります。その後、プロジェクトを右クリックしてプロジェクトファイルを編集できます。また、Visual Studioの外部でファイルを編集することもできます。

関連する問題