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

问题描述 投票:17回答:1

不确定我在这里的内容是否可以通过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
  • 如果我在aspnet_compiler.exe中排除了可换肤文件夹(在命令中添加-x Skinable),那么该文件夹不会被复制到输出文件夹,但主页仍然被编译到bin文件夹(即,生成一个skin.master.compiled文件)构建文件夹)。当我们将母版页复制到部署文件夹时,对该文件的更改将被忽略(它只是在编译时使用了母版页)。
  • 如果我在运行aspnet_compiler(attrib +h d:\SourceFolder\Skinable)之前隐藏了Skinable文件夹,那么我得到与上面相同的结果(即通过-x标志排除时)
  • 如果我在运行aspnet_compiler.exe时指定-u标志(Updatable),那么,我不确定它的优点是诚实的,因为似乎没有在该实例中编译,因此编译即时进行当你要求一个页面时,重点是什么......
  • 最后,如果我允许编译所有内容,然后进入bin文件夹并删除skin.master.compiled,那么当您请求使用该母版页的页面时,您会收到错误“文件'Skin.master'没有已预先编译,无法请求“

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

asp.net .net webforms aspnet-compiler
1个回答
0
投票

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

过程就像:

  • 捕捉他们的变化
  • 创建一个css文件夹和文件就像原始文件一样,但是有了更改
  • 从数据库表中拉出要使用的css文件。(你需要创建一个client-> css文件的映射表)
  • 使用Master页面c#写入要使用的css文件的html。

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

我们成功地使用这个过程来剥离不同的颜色。我们的文件夹系统如下:

  • 默认 - >原始Css文件
  • 黑暗主题 - >原创与黑暗的变化
  • 蓝色主题
  • 粉色主题等
© www.soinside.com 2019 - 2024. All rights reserved.