asp.net 多个css文件内容自动放到一个文件中

没事做,写了一个把多个css文件合并到一个文件中的方法,因为开发时,为了方便修改和共用css,我们可能会在页面引用4、5个css文件 ,但是实际运行中,我们是手动把css放到html 中去的 ,这样运行时页面显示快点,实际上是如此,但是每次修改的工作量是很大的,本地修改之后不能原封不动地放到服务器上去,在服务器上又要手动修改页面中的css。

在asp.net mvc模式中,我们可以把css的内容放到一个部分视图中,在head标签之间包含这个视图,那样运行时css就在html中了,我下面这个方法就是把css合并到部分视图中,说白了就是自动代替手动的工作。。。

 

        /// <summary>
        /// 多个css文件内容自动放到一个文件中,
        /// css文件中包含的(import)的css文件内容也替换原来的位置
        /// 调用示例:string info = CombineCssFiles("_Layout_css.cshtml","index.css", "site.css");
        /// </summary>
        /// <param name="DestFilePath">目标文件路径</param>
        /// <param name="cssFiles">Content下的css文件列表</param>
        /// <returns></returns>
        public static string CombineCssFiles(string DestFilePath, params string[] cssFiles)
        {
            DateTime dt1 = DateTime.Now;
            List<string> addedfile = new List<string>();
            Regex r = new Regex("@import url\\(([\\w.]+)\\);");
            string cssContent = "<style type=\"text/css\">";
            string info = "";
            if (cssFiles == null || cssFiles.Length == 0) return "";
            else
            {
                
                foreach (string cssFile in cssFiles)
                {
                    if (!addedfile.Contains(cssFile))
                    {
                        info = string.Format(info + "***************{0} start **********<br/>", cssFile);
                        cssContent = cssContent + System.IO.File.ReadAllText(GetAbsolutePath("/Content/" + cssFile), Encoding.UTF8);
                        while (true)
                        {
                            MatchCollection mc = r.Matches(cssContent);
                            if (mc.Count == 0) break;
                            foreach (Match m in mc)
                            {
                                if (!addedfile.Contains(m.Groups[1].Value))//未添加过某个文件
                                {
                                    info = info + m.Groups[0].Value + m.Groups[1].Value + "<br/>";
                                    string cssTemp = System.IO.File.ReadAllText(GetAbsolutePath("/Content/" + m.Groups[1].Value), Encoding.UTF8);
                                    cssContent = cssContent.Replace(m.Groups[0].Value, cssTemp);
                                    addedfile.Add(m.Groups[1].Value);
                                }
                                else//添加过同一个文件
                                {
                                    info = info + m.Groups[0].Value + m.Groups[1].Value + "(Added)<br/>";
                                    cssContent = cssContent.Replace(m.Groups[0].Value, "");
                                }
                            }
                        }
                        info = string.Format(info + "***************{0} end **********<br/>", cssFile);
                        addedfile.Add(cssFile);
                    }
                }
                cssContent = cssContent.Replace("@charset \"utf-8\";", "");
                cssContent = cssContent + "\r\n</style>";
                DateTime dt2 = DateTime.Now;
                TimeSpan ts = dt2 - dt1;
                info = info + "css内容放入/Views/Shared/" + DestFilePath + ",运行时间:" + ts.TotalMilliseconds + "毫秒<br/><br/>";
                using (StreamWriter sw = new StreamWriter(GetAbsolutePath("/Views/Shared/" + DestFilePath), false, Encoding.UTF8))
                {
                    sw.Write(cssContent);
                }
                return info;
            }
        }
//2013-11-18解决了重复引用一个文件的问题。

时间: 2024-07-30 18:30:57

asp.net 多个css文件内容自动放到一个文件中的相关文章

Linux系统下将多个文件内容合并为一个文件的方法

  现在的工作最重视的是什么?当然是工作能力和工作效率,很多使用Linux系统的小伙伴们都遇到同意一个问题,想要导入数据库的时候,如果一个文件一个文件的导入的话,进程很慢,拖延时间,从而降低了工作效率.所以想找到一个新方法,可以将多个文件合成一个,这样不仅导入方便,而且速度也快,似乎是个不错的方法呢!下面小编就教大家Linux系统中如何将多个文件合成为一个,希望对大家有用! 在iDB Cloud 中发现导出的数据库文件是按照每个表生成的SQL文件,这么多单独的文件再导入到其他数据库中是个麻烦事,

本机打开文件后自动生成日志文件

问题描述 本机打开文件后自动生成日志文件 本机打开某种文件后自动生成日志文件,怎么不让生成日志文件?谢谢-

flex+java选择本地文件然后读取文件内容并导入到数据库中,怎么实现啊,求高手指点,,

问题描述 flex+java选择本地文件然后读取文件内容并导入到数据库中,怎么实现啊,求高手指点,,需要实现的功能是:选择本地文件txt或xls的,然后把文件内容导入数据库中,, 解决方案 解决方案二:问错版块了解决方案三:引用1楼p2227的回复: 问错版块了 !!!!!!那应该算哪个版块的,java+flex解决方案四:flex有个块的http://forum.csdn.net/SList/Flex/java一个大版块了,你展开再自己决定啰

实现通过jsp读取文件内容并保存到数据库中

问题描述 通过jsp读取文件内容并保存到数据库中要读取的文件格式文.txt或者Excel都可以!jsp页面怎么写?如何实现?还有Java代码 解决方案 解决方案二:通过jsp读取文件内容并保存到数据库中要读取的文件格式文.txt或者Excel都可以!jsp页面怎么写?如何实现?还有Java代码解决方案三:建议:页面jsp做成上传文件,后台用流读取文件,将内容存储到数据库.注意:文件内容的大小与数据库字段的大小

通过字节流复制大文件内容到指定的文件

package com.neusoft.copyfile; /** * @time 2014-8-15 上午10:32:46 * @author new * @function 复制文件内容到指定的文件 * */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * */ public class CopyFil

Java多种方式读文件,追加文件内容,等对文件的各种操作

一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStre

怎么把一个文件复制到另外一个文件夹里

问题描述 怎么把一个文件复制到另外一个文件夹里 解决方案 解决方案二:右击-复制-切换文件夹-粘贴解决方案三:File.Copy(sourceFile,TargetFile,true)解决方案四:是用的file.cope但是有问题,Accesstothepath'C:WindowsStartApp.exe'isdenied.解决方案五:是不是你文件夹的属性,不让复制呢解决方案六:你那个exe正在用,当然不能复制啦解决方案七:怎么才可以运行时可以自动复制解决方案八:是用的file.cope但是有问

请教如何将数据库中的某一条记录的内容读到一个变量中?

问题描述 请教vb.net2005如何将数据库中的某一条记录的内容读到一个变量中?希望语句能有注释,谢谢!数据库为Access2003 解决方案 解决方案二:Access位置是否相对固定?如果相对固定又没有太多安全上的要求的话不用自己写代码就成.在项目中添加你那个Access文件,然后会在工程数据库中看到你添加的内容,把东西往窗体上一拖就成了,自动会在Load中添加代码.解决方案三:谢谢楼上的朋友回复,数据库的绑定.链接等等我知道,现在需要的是读某一条记录到一个变量中的方法!应该如何写语句?解决

c-一般情况下,应该多个函数放一个文件里,还是一个函数放到一个文件里

问题描述 一般情况下,应该多个函数放一个文件里,还是一个函数放到一个文件里 我非科班出身,也从来没读过改内容. 也许是因为书读的不仔细? 解决方案 对于java来说,一个文件一个类(public的类) 多个函数放一个文件里还是一个函数放一个文件里取决于这些函数的相关性.好比你写作文是一句话一个段落还是一个段落好几句话,这个要灵活掌握,老师没法教你. 你去看windows.linux.jdk.mfc等等的源代码,你会发现这个问题根本就不算一个问题. 解决方案二: 我觉得学习应该有3个阶段 模仿 -