Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET4下的castle中使用小型服务器和绑定器_C#_.net_C# 4.0_.net 4.0_Castle - Fatal编程技术网

C# 在.NET4下的castle中使用小型服务器和绑定器

C# 在.NET4下的castle中使用小型服务器和绑定器,c#,.net,c#-4.0,.net-4.0,castle,C#,.net,C# 4.0,.net 4.0,Castle,我已经尝试了squshit和rejuicer,尝试在视图中合并和缩小一些css和js。到目前为止没有运气。我所做的是在一个过滤器里 #region using using System; using Castle.MonoRail.Framework; using campusMap.Models; using MonoRailHelper; using Rejuicer; #endregion namespace campusMap.Filters {

我已经尝试了squshit和rejuicer,尝试在视图中合并和缩小一些css和js。到目前为止没有运气。我所做的是在一个过滤器里

#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using Rejuicer;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["adminRejuicer_css"] = OnRequest.ForCss("~/Content/css/min/Combined.css").Compact;
            controllerContext.PropertyBag["adminRejuicer_js"] = OnRequest.ForJs("~/Content/js/min/Combined.js");
            //controllerContext.PropertyBag["JavaScriptBundle"] = new JavaScriptBundle();
            return true;
        }
    }
}
然后在基础控制器上

#region Directives
    using Castle.MonoRail.Framework;
    using campusMap.Services;
    using System.Text.RegularExpressions;
    using System;
    using campusMap.Models;
    using Castle.ActiveRecord;
    using MonoRailHelper;
    using campusMap.Filters;
    using log4net;
    using log4net.Config;
    using System.Text;

#endregion
namespace campusMap.Controllers
{
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))]
    [Layout("default"), Rescue("generalerror")]
    public abstract class BaseController : MonoRailHelper.HelperBaseController
    {
    }
最后从视图中的

    $adminRejuicer_css.File("~/Content/css/admin_styles.css").File("~/Content/js/colorpicker/css/jpicker-1.1.6.min.css")
但什么都没有。如果我对squshit做了基本相同的事情,但是在过滤器中

    controllerContext.PropertyBag["cssBundle"] = Bundle.Css();
面纱

    $cssBundle.Add("~/Content/css/admin_styles.css").Add("~/Content/js/colorpicker/css/jpicker-1.1.6.min.css").Render("~/Content/css/min/admin.css")
这一次,它至少只输出两个脚本的标记,没有缩小或捆绑,但至少它正在做一些事情

有什么办法吗?
谢谢-Jeremy

您需要将其放入应用程序启动方法中的Global.asax.cs文件中


OnRequest.ForCss(“~/Content/css/min/Combined.css”)


请看这篇博文(不是我的)

,就是这样做的。这是在使用squshit,但是rejuncier也是这样做的

BaseController.cs

#region Directives 
    using Castle.MonoRail.Framework; 
    using campusMap.Services; 
    using campusMap.Models; 
    using Castle.ActiveRecord; 
    using MonoRailHelper; 
    using campusMap.Filters; 
    //any others you'd need
#endregion 
namespace campusMap.Controllers 
{ 
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))] 
    [Layout("default"), Rescue("generalerror")] 
    public abstract class BaseController : MonoRailHelper.HelperBaseController 
    { 
        protected ScriptsService ScriptsService = new ScriptsService();
    } 
}
#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        protected ScriptsService scriptsService = new ScriptsService();
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["scriptsService"] = scriptsService;
            return true;
        }
    }
}
#region Directives
    using System;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
    using Castle.MonoRail.Framework;
    using campusMap.Filters;

    using SquishIt.Framework;
    using SquishIt.Framework.Css;
    using SquishIt.Framework.JavaScript;
    using System.Security.Cryptography;

#endregion

namespace campusMap.Services
{
    public class ScriptsService
    {
        public static string CalculateMD5Hash(string input)
        {
            // step 1, calculate MD5 hash from input
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes);

            // step 2, convert byte array to hex string
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

        public static String Css(string files)
        {
            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/css/";
            String FilePath = path + name + ".css";

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            CSSBundle css = new CSSBundle();     
            foreach (string fl in files.Split(','))
            {
                css.Add(fl);
            }
            return css.ForceRelease().Render(FilePath);
        }
        public static String Js(string files)
        {

            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/js/";
            String FilePath = path + name + ".js" ;

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            JavaScriptBundle js = new JavaScriptBundle();
            foreach (string fl in files.Split(','))
            {
                js.Add(fl);
            }
            return js.ForceRelease().Render(FilePath);
        }
    }
}
然后在过滤器里

scriptFilter.cs

#region Directives 
    using Castle.MonoRail.Framework; 
    using campusMap.Services; 
    using campusMap.Models; 
    using Castle.ActiveRecord; 
    using MonoRailHelper; 
    using campusMap.Filters; 
    //any others you'd need
#endregion 
namespace campusMap.Controllers 
{ 
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))] 
    [Layout("default"), Rescue("generalerror")] 
    public abstract class BaseController : MonoRailHelper.HelperBaseController 
    { 
        protected ScriptsService ScriptsService = new ScriptsService();
    } 
}
#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        protected ScriptsService scriptsService = new ScriptsService();
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["scriptsService"] = scriptsService;
            return true;
        }
    }
}
#region Directives
    using System;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
    using Castle.MonoRail.Framework;
    using campusMap.Filters;

    using SquishIt.Framework;
    using SquishIt.Framework.Css;
    using SquishIt.Framework.JavaScript;
    using System.Security.Cryptography;

#endregion

namespace campusMap.Services
{
    public class ScriptsService
    {
        public static string CalculateMD5Hash(string input)
        {
            // step 1, calculate MD5 hash from input
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes);

            // step 2, convert byte array to hex string
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

        public static String Css(string files)
        {
            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/css/";
            String FilePath = path + name + ".css";

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            CSSBundle css = new CSSBundle();     
            foreach (string fl in files.Split(','))
            {
                css.Add(fl);
            }
            return css.ForceRelease().Render(FilePath);
        }
        public static String Js(string files)
        {

            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/js/";
            String FilePath = path + name + ".js" ;

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            JavaScriptBundle js = new JavaScriptBundle();
            foreach (string fl in files.Split(','))
            {
                js.Add(fl);
            }
            return js.ForceRelease().Render(FilePath);
        }
    }
}
您将看到,在这一点上,您将为每个调用附加一个筛选器,所有内容都将呈现,并将对服务的引用放置到属性包中,以便我们可以访问它。接下来是服务,因此我们可以提供访问的方法

ScriptsService.cs

#region Directives 
    using Castle.MonoRail.Framework; 
    using campusMap.Services; 
    using campusMap.Models; 
    using Castle.ActiveRecord; 
    using MonoRailHelper; 
    using campusMap.Filters; 
    //any others you'd need
#endregion 
namespace campusMap.Controllers 
{ 
    [Filter(ExecuteWhen.BeforeAction, typeof(scriptFilter))] 
    [Layout("default"), Rescue("generalerror")] 
    public abstract class BaseController : MonoRailHelper.HelperBaseController 
    { 
        protected ScriptsService ScriptsService = new ScriptsService();
    } 
}
#region using
    using System;
    using Castle.MonoRail.Framework;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
#endregion

namespace campusMap.Filters
{
    public class scriptFilter : IFilter
    {
        protected ScriptsService scriptsService = new ScriptsService();
        public bool Perform(ExecuteWhen exec, IEngineContext context, IController controller, IControllerContext controllerContext)
        {
            controllerContext.PropertyBag["scriptsService"] = scriptsService;
            return true;
        }
    }
}
#region Directives
    using System;
    using campusMap.Models;
    using MonoRailHelper;
    using campusMap.Services;
    using Castle.MonoRail.Framework;
    using campusMap.Filters;

    using SquishIt.Framework;
    using SquishIt.Framework.Css;
    using SquishIt.Framework.JavaScript;
    using System.Security.Cryptography;

#endregion

namespace campusMap.Services
{
    public class ScriptsService
    {
        public static string CalculateMD5Hash(string input)
        {
            // step 1, calculate MD5 hash from input
            MD5 md5 = MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
            byte[] hash = md5.ComputeHash(inputBytes);

            // step 2, convert byte array to hex string
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

        public static String Css(string files)
        {
            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/css/";
            String FilePath = path + name + ".css";

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            CSSBundle css = new CSSBundle();     
            foreach (string fl in files.Split(','))
            {
                css.Add(fl);
            }
            return css.ForceRelease().Render(FilePath);
        }
        public static String Js(string files)
        {

            String name = CalculateMD5Hash(files);
            String path = @"/cache/script/js/";
            String FilePath = path + name + ".js" ;

            if (!HelperService.DirExists(path))
            {
                System.IO.Directory.CreateDirectory(path);
            }
            JavaScriptBundle js = new JavaScriptBundle();
            foreach (string fl in files.Split(','))
            {
                js.Add(fl);
            }
            return js.ForceRelease().Render(FilePath);
        }
    }
}
需要注意的一点是,永远不要只是手动清除缓存。Squshit将为您中断客户端,因此不必担心触摸文件


就这些。

好的。我试试看。。但是,你如何区分,让我们说一边是管理员,一边是正面的公众面孔。。我认为在OnRequest.ForCss(“~/Content/css/min/Combined.css”)和OnRequest.ForCss(“~/Content/css/min/admin\u Combined.css”)上做一个会引起麻烦吗?我很快会回来看看这是否有效。tk——简单地添加OnRequest.ForCss(“~/Content/css/min/Combined.css”)不起作用。您也不能在那里使用controllerContext.PropertyBag[“administrationer\u css”]=OnRequest.ForCss(“~/Content/css/min/Combined.css”)。嘿,你以前没有使用过这个castle应用程序吗?我想如果你知道怎么做的话,只需要复制粘贴来帮助你会快得多。谢谢你的帮助。。干杯--