欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-03-27 16:45:48
没事做,写了一个把多个css文件合并到一个文件中的方法,因为开发时,为了方便修改和共用css,我们可能会在页面引用4、5个css文件 ,但是实际运行中,我们是手动把css放到htm...
没事做,写了一个把多个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解决了重复引用一个文件的问题。