web-dev-qa-db-ja.com

netcore 2.0 Visual Studio2017でプロジェクトを公開するときにビューがコピーされない

VS2017でASP.NETCore 2.0プロジェクトを作成しました。プロジェクトを公開すると、Viewsフォルダーはありませんが、wwwrootフォルダーはあります。

これは、.csprojファイルで次のように設定できます。

<ItemGroup>                                                                            
   <Content Update="appsettings.json;web.config" CopyToOutputDirectory="PreserveNewest"/>
   <Content Update="Views\**\*" CopyToOutputDirectory="PreserveNewest" />
   <Content Update="wwwroot\**\*" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

しかし、動作しませんでした。

9
Anil

ASP.NET Core MVCには precompilation 機能があり、Microsoft.AspNetCore.Mvc.Razor.ViewCompilationパッケージを参照することで追加できます。 MvcRazorCompileOnPublishプロパティで構成された機能の有効化/無効化は.csprojです。

また、デフォルトでは、パッケージはASP.NET Core 2.0MVCアプリケーションに追加されています。

Netcoreapp2.0でASP.NETCore 2.0以降を対象としている場合、 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation パッケージへの参照がMicrosoft.AspNetCore.Allによって追加されますが、追加されません。明示的に参照する必要があります。

および プリコンパイルが有効になっています

ASP.NET Core 2.xプロジェクトテンプレートは、デフォルトでMvcRazorCompileOnPublishを暗黙的にtrueに設定します。これは、このノードを.csprojファイルから安全に削除できることを意味します。

<PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
  </PropertyGroup>

出力フォルダを公開すると、<project_name>.PrecompiledViews.dllwitchのようなdllにビューが含まれていることがわかります。

16
Set

3.1では、.cshtmlファイルが表示されない状態で、上記のすべてを試しました。興味深いことに、.csファイルをコピーしてフォルダーを公開します。つまり、私のcsprojでは、最初の2つは機能しますが、もう1つは機能しません

   <ItemGroup>
    <Compile Update="Pages\AisLayout.cs">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Compile>
    <Compile Update="Pages\Application.cs">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Compile>
  </ItemGroup>

  <ItemGroup>
    <Content Update="Pages\ApplicationState.cshtml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="Pages\Cookies.cshtml">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>

ファイルを手動でコピーすると、動的再コンパイルが発生するようにファイルを変更できます(予想どおり)。注:.cshtmlにはファイルの背後にコードがありません(長い話)。

その他の提案?

0
Ken Lassesen

デフォルトで<project_name>.Views.dllを生成している可能性があります。プロジェクトの.csprojファイルにMvcRazorCompileOnPublishproperty falseを設定する必要があります。デフォルトではtrueです。

<PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>    
</PropertyGroup>
0
Baqer Naqvi