预编译aspx和cshtml页面,但使母版页面或布局页面可更新

时间:2018-07-11 12:05:30

标签: asp.net .net webforms aspnet-compiler

不确定aspnet_compiler.exe工具是否可以实现我的要求,但是这里是:

我们有一个网站,允许用户通过修改主页面来换肤-或更确切地说,我们不允许用户直接对其进行修改,我们为他们提供了一种缩减的“标记”样式语言,可供他们使用修改这些页面的html,这样它们就可以从本质上“蒙皮”该网站,使其看起来像自己的前端。

我热衷于尝试通过预编译视图和aspx页面来优化网站。但是我希望这些视图和页面使用的布局和母版页面保持可更新。但是,我无法正常工作...

说我们有以下aspx页面:

<%@ Page Title="Hello World" MasterPageFile="~/Skinable/Skin.Master" Language="C#" AutoEventWireup="true" CodeBehind="HelloWorld.aspx.cs" Inherits="Project.HelloWorld" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="server">
    Hello World!
</asp:Content>

Skin.Master文件夹中引用母版页文件SkinableSkin.Master需要可更新。这是我尝试过的:

  • 如果我只是使用此aspnet_compiler.exe命令来编译站点, 母版页也被编译,并且不可更新:

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v / -p d:\SourceFolder d:\CompiledSite

  • 如果我排除皮肤文件夹(将-x Skinable添加到 命令)在aspnet_compiler.exe中,则文件夹不会 复制到输出文件夹,但母版页仍编译为 bin文件夹(即skin.master.compiled文件生成到 构建文件夹)。当我们将母版页复制到 部署文件夹,对该文件的更改将被忽略(它只是使用了 母版页)。

  • 如果在运行aspnet_compiler(attrib +h d:\SourceFolder\Skinable)之前隐藏Skinable文件夹,则得到的结果与上述相同(即,通过-x标志排除时)

  • 如果在运行时指定-u标志(可更新) aspnet_compiler.exe,好吧,我不确定这样做的好处是什么 老实说,在这种情况下似乎没有任何编译,所以 当您请求页面时,编译会实时进行,所以 重点...

  • 最后,如果我允许编译所有内容,然后进入 bin文件夹并删除skin.master.compiled,然后在您请求 使用该母版页的页面,您将收到错误消息“文件 'Skin.master'尚未预编译,因此无法请求”

我怀疑此处是对母版页的引用-即,如果某个页面引用了母版页,那么如果您要编译该母版页,则也必须对该母版页进行编译,但是我不确定。我在这里躲藏起来吗?

1 个答案:

答案 0 :(得分:0)

如果您以不同的方式去做呢?如果您“捕获”了他们的html和css更改,然后为该公司创建了一个新的css文件夹或文件怎么办? (文件是原始文件及其更改。然后,在加载母版页时,它会从数据库中提取公司使用的文件或文件夹,然后从母版页的c#中将其写入CSS。

过程类似于:

  • 捕获他们的更改
  • 制作一个css文件夹和文件,就像原始文件一样,但要进行更改
  • 从要使用的css文件的数据库表中提取。(您需要制作一个client-> css文件的映射表)
  • 使用母版页c#写入要使用的css文件的html。

从本质上讲,这将使运行时根据您的CSS更改加载    客户,您不必担心编译。

我们成功地使用了此过程来为不同的颜色设置皮肤。 我们的文件夹系统就像:

  • 默认->原始CSS文件
  • 深色主题->具有深色变化的原始
  • 蓝色主题
  • 粉色主题等