asp.mvc视图在发布配置中输入#IF DEBUG

时间:2009-09-04 11:30:23

标签: asp.net-mvc configuration debugging

我有一个ASP MVC视图,其中包含以下语句

#if DEBUG
  //section 1
  //do stuff
#else
  //section 2
  //do other stuff
#endif

在visual studio中,我从下拉列表中选择发布配置来进行构建,代码仍然会逐步完成第1部分。

在解决方案配置属性中,解决方案的所有子项目都设置为发布配置。

我没有到这里来的是什么?

3 个答案:

答案 0 :(得分:32)

重要的是要了解您的项目有两个完全独立的编译。第一个是您在Visual Studio中执行的操作。第二个是ASP.NET在提供页面之前执行的操作。视图中的if DEBUG是在第二步中完成的。您描述的发布版本是第一步。因此,您的项目的调试/发布设置与Web.config / ASP.NET编译器中的调试设置完全没有任何关系。

此外,您的Visual Studio构建更改Web.config中的调试设置是完全不合适的。这是两个独立的编辑,一个不应该影响另一个。

另一方面,当您在Visual Studio内部进行调试时,您可能非常需要使视图的行为不同,并且您可以执行此操作。您只需将视图外的“if”语句移动到由Visual Studio而不是ASP.NET编译的内容中。我们使用HTML帮助程序执行此操作。例如:

        /// <summary>
        /// Returns the HTML to include the appropriate JavaScript files for 
        /// the Site.Master.aspx page, depending upon whether the assembly 
        /// was compiled in debug or release mode.
        /// </summary>
        /// <returns>HTML script tags as a multi-line string.</returns>
        public static string SiteMasterScripts(this UrlHelper helper)
        {
            var result = new StringBuilder();
#if DEBUG
            result.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>", helper.Content("~/Content/js/MicrosoftAjax.debug.js"));
#else
            result.AppendFormat("<script src=\"{0}\" type=\"text/javascript\"></script>", helper.Content("~/Content/js/MicrosoftAjax.js"));
#endif
        // etc. ...

这包括在Visual Studio中的调试配置中运行时调试JS文件,否则最小化JS。

答案 1 :(得分:3)

<compilation debug="false">文件中设置web.config

答案 2 :(得分:0)

检查项目的设置以确保未定义DEBUG。