通过构建配置禁用基于编译器切换的控制器

时间:2012-04-13 11:46:29

标签: asp.net-mvc-3 c#-4.0 buildconfiguration

我正在使用MVC3,我需要将同一个网站部署到多个位置,但禁用某些控制器。要禁用的控制器共享相同的基本控制器类。

我认为我应该可以使用不同的构建配置来完成此操作,每个配置都有一组不同的编译器开关来控制启用或禁用哪些控制器组。

我无法确定实现这一目标的最佳方法。有人可以帮忙吗?也许是OnActionExecuting中的某些内容?

由于

2 个答案:

答案 0 :(得分:0)

您是否在谈论根据活动配置进行条件编译?

转到项目属性 - >构建 - >条件编译符号并添加字符串常量

然后你可以写这样的代码:

#if TESTCFGACTIVE
        Console.WriteLine("Test CFG Constant");
#else
        Console.WriteLine("Normal");
#endif
        Console.ReadLine();

显然,在发布模式和调试模式下运行会产生不同的输出。

不完全确定这是否是您所追求的,但我谨慎地使用它,例如禁用和启用不同环境中的调试/日志记录。

对于你正在谈论的内容,它更多的是关于应用程序的行为,我会使用一个简单的配置设置来打开或关闭控制器。然后,您可以使用构建脚本将相关的配置文件部署到相关的输出目录。

答案 1 :(得分:0)

可能是Creating custom route constraint并使用ConditionalAttribute

这些方面的东西:

public class DisabledControllersRouteConstraint : IRouteConstraint
{
    IList<string> DisabledControllers = new List<string>();

    public DisabledControllersRouteConstraint()
    {
        DisableConstrollersDebug();
        DisableConstrollersRelease();
        DisableConstrollersProduction();
    }

    [Conditional("RELEASE")]
    private void DisableConstrollersRelease()
    {
        DisabledControllers.Add("ControllerDisabledForRelease");
    }

    [Conditional("PROD")]
    private void DisableConstrollersProduction()
    {
        DisabledControllers.Add("ControllerDisabledForProduction");
    }

    [Conditional("DEBUG")]
    private void DisableConstrollersDebug()
    {
        DisabledControllers.Add("ControllerDisabledForDebug");
    }

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var controller = values["controller"];

        return !DisabledControllers.Contains(controller);
    }
}