@matrixugly が提案することを行うと問題は解決しますが、コンパイル時のビュー チェックも機能しなくなります。コンパイル時にビューをエラーチェックしたいと思いますか? その場合は、以下の修正をお勧めします。
これらのソリューションが機能する理由を理解するには、まず問題がどのように作成されるかを知る必要があります。
- 開発者は、コンパイル時にビューをチェックする必要があるため、
MvcBuildViews=true
.
- プロジェクトが公開されるまで、アプリケーションは正常にビルドされます。
- その後プロジェクトをビルドしようとすると、コンパイル時エラーが発生します。
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
、エラーが発生します。これは、フォルダーの下にあるため、コンパイル中に aspnet コンパイラーがobj\
フォルダーを含めるため<project-dir>
です。
では、これを修正するにはどうすればよいでしょうか。次の 4 つのオプションがあります。
- 設定し
MvcBuildViews=false
ます。私はこれが解決策だとは本当に考えていないので、先に進みましょう。
- 内のファイルを削除します
<project-dir>\obj\
。機能しますが、公開するたびに実行する必要があるため、面倒な場合があります。
<BaseIntermediateOutputPath>
プロジェクト構成ファイルのプロパティを使用して、パブリッシングが中間ディレクトリとして使用するパスを変更します。
例 (参照:このリンク):
<BaseIntermediateOutputPath>
[SomeKnownLocationIHaveAccessTo]
</BaseIntermediateOutputPath>
ビルド時に問題のあるファイルを削除するプロジェクト構成ファイルに新しいセクションを追加します ( 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 のいずれかを使用することです。
注: プロジェクト ファイルを編集したことがない場合は、ロード中に編集することはできません。最初に、右クリックして を選択してアンロードする必要がありUnload Project
ます。その後、プロジェクトを右クリックして、プロジェクト ファイルを編集できます。または、Visual Studio の外部でファイルを編集することもできます。