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



不确定我在这里追求的东西是否可以通过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>

它引用Skinable文件夹中的母版页文件Skin.MasterSkin.Master需要可更新。以下是我尝试过的:

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

    C:WindowsMicrosoft.NETFramework64v4.0.30319aspnet_compiler.exe -v / -p d:SourceFolder d:CompiledSite

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

  • 如果我在运行aspnet_compiler(attrib +h d:SourceFolderSkinable(之前隐藏了Skinable文件夹,那么我会得到与上面相同的结果(即通过-x标志排除(

  • 如果在运行时指定-u标志(可更新(aspnet_compiler.exe,嗯,我不确定它的优点是什么老实说,因为在这种情况下似乎没有编译任何东西,所以当您请求一个页面时,编译是动态进行的,那么重点。。。

  • 最后,如果我允许编译所有内容,然后进入bin文件夹和DELETE skin.master.compied,然后当您请求使用该母版页的页面,则会得到错误"the file"Skin.master"尚未预编译,无法请求

我怀疑对母版页的引用是这里的问题——也就是说,如果一个页面引用了母版页,那么如果你想编译该页面,那么该母版页也必须编译,但我不确定。我是不是在这里什么都不隐瞒?

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

流程如下:

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

本质上,这使得在运行时加载的css更改基于客户端,您不必担心编译。

我们成功地将此过程用于不同颜色的蒙皮。我们的文件夹系统是这样的:

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

最新更新