首页 > 解决方案 > Razor 类库 (RCL) _ViewImports 在站点运行时被忽略

问题描述

我创建了一个 Razor 类库 (RCL),以按照本文中的模式为多个站点创建一个“通用 UI” 。但是我遇到了问题_ViewImports.cshtml

在我的 RCL 中,我有一个_TemplateLayout.cshtml. 它使用了一个名为BTR.Camelot.Infrastructure. 所以在 中_ViewImports.cshtml,我有:

@using BTR.Camelot.Infrastructure.Serialization

这样 RCL 就会编译。没有它,它不会编译。

当我运行引用 RCL 并使用其模板的项目时,我收到以下错误:

当前上下文中不存在名称“JavascriptSerializer” Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(@Html.Raw( JavascriptSerializer.MicrosoftAjaxCultureInfo ));

JavascriptSerializer 在我的BTR.Camelot.Infrastructure.Serialization命名空间中。我的猜测是:

  1. _ViewImports.cshtml 用于 RCL 以确保它可以编译。
  2. 站点中的_ViewImports.cshtml优先于RCL中的 _ViewImports.cshtml,并且完全忽略 RCL 版本。

有没有办法让_ViewImports.cshtml文件“合并”?这个问题似乎承认存在这个问题,但只是接受您应该删除这些站点_ViewImports.cshtml。我希望有一个解决方法。

我的项目结构

RootFolder
+-- SiteTemplates
|   +-- Evolution
|   |   +-- Pages
|   |   |   +-- _ViewImports.cshtml
|   |   +-- Evolution.csproj
|
+-- Websites
|   +-- Personal
|   |   +-- RTC
|   |   |   +-- Pages
|   |   |   |   +-- Shared
|   |   |   |   |   +-- _TemplateLayout.cshtml
|   |   |   |   +-- _ViewImports.cshtml
|   |   |   +-- RTC.csproj
|
+-- Infrastructure
|   +-- Infrastructure.csproj

RTC(主站点)引用 Infrastructure.csproj 和 Evolution.csproj (RCL)。

Evolution.csproj 引用 Infrastructure.csproj。

Evolution/Pages/_ViewImports.cshtml

@using BTR.Camelot.Infrastructure.Configuration
@using BTR.Camelot.Infrastructure.Serialization
@using BTR.Camelot.SiteTemplates.Evolution.Resources

@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

@namespace BTR.Camelot.SiteTemplates.Evolution.Pages

RTC/Pages/_ViewImports.cshtml

@namespace BTR.Camelot.Websites.Personal.RTC.Pages

@using BTR.Camelot.Websites.Personal.RTC.Models
@using BTR.Camelot.Infrastructure.Configuration
@using BTR.Camelot.Core.Extensions.LINQ
@* Not using/needing Serialization here, but RCL Layout file does.  See comment in RCL _ViewImports.cshtml *@
@using BTR.Camelot.Infrastructure.Serialization

@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options

如果我在 RTC 项目中删除或注释掉@using BTR.Camelot.Infrastructure.Serialization,那么我会收到异常。

标签: c#asp.net-corerazorrazor-pages

解决方案


推荐阅读