C# 未编译的局部视图不';不能从ViewImports继承

C# 未编译的局部视图不';不能从ViewImports继承,c#,asp.net-core,razor-pages,asp.net-core-2.2,C#,Asp.net Core,Razor Pages,Asp.net Core 2.2,我将视图的一部分移动到局部视图中 _ViewImports.cshtml @using AsonCore.Helpers @using AsonCore.Models @namespace AsonCore.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers Application.cshtml @page @model ApplicationModel <partial name="/Pages/Partial/_A

我将视图的一部分移动到局部视图中


_ViewImports.cshtml

@using AsonCore.Helpers
@using AsonCore.Models
@namespace AsonCore.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
Application.cshtml

@page
@model ApplicationModel

<partial name="/Pages/Partial/_ApplicationPartial.cshtml" />
@page
@模型应用模型
_ApplicationPartial.cshtml

@model ApplicationModel
<section class="content application">
    <div>
        <form method="post" enctype="multipart/form-data">
            <div>
                <label asp-for='email.Firstname'>FORNAVN</label>
                <input asp-for='email.Firstname' required />
            </div>
            <div>
                <label asp-for="email.Lastname">ETTERNAVN</label>
                <input asp-for="email.Lastname" required />
            </div>
            <div>
                <input type="submit" value="Send" />
            </div>
        </form>
        <partial name="/Pages/Shared/_FormScript.cshtml" />
    </div>
</section>
@model应用程序模型
福纳文
艾特纳夫
_Project.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
    <RootNamespace>AsonCore</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <Content Remove="Pages\Partial\**" />
  </ItemGroup>

  <ItemGroup>
    <None Include="Pages\Partial\**">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
  </ItemGroup>

</Project>

netcoreapp2.2
过程中
阿森科尔
保存最新

在生成时,部分视图将从compiled views.dll中删除,以启用其内容的动态更新。当我这样做时,最初从
\u ViewImports.cshtml继承的内容将停止

通过将
@namespace AsonCore.Pages
添加到部分视图,它选择了
模型
,但随后我注意到,在部署到服务器后(虽然它在VS2019中工作),“TagHelpers”停止工作

同时将Microsoft.AspNetCore.Mvc.TagHelpers
添加到视图中修复了这一问题,但我的问题是,这是否需要/应该这样做


或者,在保留“ViewImports”继承的情况下,是否有其他方法防止编译特定视图?

我将此自我回答作为一种临时解决方法发布(但仍希望有一种方法,它将解释发生了什么,以及在官方资源/文档中的何处可以找到它)


它似乎并不比已编译的局部视图复杂,它使用已编译的
\u ViewImports.cshtml
,对于任何未编译的视图,它需要一份
\u ViewImports.cshtml
的副本,该副本位于其默认位置
Pages\
文件夹中

在我的情况下是这样的

\Pages\Partial\
  _Application.cshtml

\Pages\
  _ViewImports.cshtml

\
  AsonCore.Views.dll

结果还表明,用户可以获取任何其他已编译的主视图文件(发布时未删除,正如我对部分视图所做的那样),将其复制到
Pages\
文件夹中,如果需要进行编辑,它将重新加载并覆盖位于views.dll中的已编译主视图文件


但是,仅上述内容将在异常中呈现(当尝试在运行时执行未编译视图时),但在这个答案的帮助下,它可以工作,这表示:

若要更正此问题,您必须使用发布文件夹“添加参考文件”子文件夹 一些运行时程序集。如果您这样做,则通常会创建此refs文件夹 发布项目时,
MVCranchorCompileOnPublish
设置为
false
。那么你呢 必须一次发布而不预编译到另一个文件夹和 从那里复制此refs子文件夹

请注意,除了使用Core 2.2中的这个refs文件夹之外,可能还有其他方法,如果有人知道,请随时编辑我的答案


编辑-ASP.NET Core 3.1

对于使用3.1的
refs
文件夹,只需执行以下操作即可在发布时复制运行时文件:

启动中

services.AddRazorPages()
    .AddRazorRuntimeCompilation();
.csproj
文件中

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.4" />

FYI,您可以在.csproj文件中将
CopyRefAssembliesToPublishDirectory
设置为
true
,而无需设置手动复制文件的规则等。MSBuild属性将记录在案。