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子文件夹
编辑-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属性将记录在案。