【问题标题】:ASP.NET framework bugASP.NET 框架错误
【发布时间】:2011-05-20 08:07:41
【问题描述】:

进入您的 iis 机器级别设置并添加

<deployment retail="true" /> 

http://msdn.microsoft.com/en-us/library/ms228298.aspx中指定

创建一个新的网络项目,添加标签,然后添加以下代码。

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = HttpContext.Current.IsDebuggingEnabled.ToString();
}

//Result: true 

我错过了什么?

更新:我更新了机器配置的 64 位和 32 位版本的值。服务器正在运行 IIS7.5。重新启动没有帮助。

更新 2:

使用 Reflector 单步执行 V4 框架,我得到以下代码。

public bool IsDebuggingEnabled
{
    get
    {
        try
        {
            return CompilationUtil.IsDebuggingEnabled(this);
        }
        catch
        {
            return false;
        }
    }
}

internal static bool IsDebuggingEnabled(HttpContext context)
{
    return MTConfigUtil.GetCompilationConfig(context).Debug;
}

//Here is where I lose whats going on... Either way, if what Yaur said is correct then
//I believe that value is not only useless but dangerously misleading. 
internal static CompilationSection GetCompilationConfig(HttpContext context)
{
    if (!UseMTConfig)
    {
        return RuntimeConfig.GetConfig(context).Compilation;
    }
    return GetConfig<CompilationSection>(context);
}

无论如何。我可以确认的是该功能似乎不起作用。

PS:@Yaur - 是的,我已尝试更改该值,并且我很清楚使用此方法的替代方法,但重点是此方法应该简化部署。

【问题讨论】:

  • 我正在进一步研究这个问题,但现在请注意,这些要求提到了针对 IIS6,下面的博文来自 2006 年
  • 公平点,但请注意,该页面是框架 4 之一。如果他们能具体说明“要求”是“最低要求”还是“绝对要求”,那就太好了
  • 是的,我知道。所以“零售”技巧适用于编译的二进制文件,但似乎不会影响当前上下文,仍然反映......它似乎只影响跟踪,而不是调试的东西。诚然,您必须有用于跟踪的调试,但您不必有用于调试的跟踪
  • 接下来要尝试的是使用反射器专业版进入它,看看它在运行时做了什么。不过,我要到明天晚上才能做到这一点。

标签: c# asp.net deployment debugging


【解决方案1】:

根据:http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx,应该强制:

<system.web>
  <compilation debug="false">
</system.web>

您是否重新启动了服务器? 您编辑了哪个 machine.config?

【讨论】:

  • 这就是重点,我的理解是它应该覆盖 web.config 设置。没有?
  • 来自 mdsn :“当零售设置为 true 时,ASP.NET 会禁用 某些 配置设置,例如跟踪输出、自定义错误和调试功能。”
  • 对吗?确切地说是“和调试功能”!
  • 是的,但也许它不会作用于这个特定的属性:HttpContext.Current.IsDebuggingEnabled,因此某些和我的答案。
  • 那么要么声明被破坏,要么该属性被破坏。无论哪种方式,有些可疑......(也许它只是我正在测试的系统,我会尽快尝试另一个)
【解决方案2】:

查看反射器中的 HttpContext,此方法所做的只是加载在编译部分中找到的值。因此,按照 mathieu 的建议进行设置,您应该是金色的。
另外(如果你关心的话)如果在单声道下运行它会抛出异常。

来自System.Web的2.0版本

它调用

CompilationUtil.IsDebuggingEnabled(this);

哪个调用

RuntimeConfig.GetConfig(context).Compilation.Debug;

编译.获取回报

(CompilationSection) this.GetSection("system.web/compilation", typeof(CompilationSection), ResultsIndex.Compilation);

4.0 版本有点不同...根据我可以说它看起来“额外的东西”是多目标支持。因此,如果您的目标是 .net 4 并且设置 &lt;compilation debug="false"&gt; 不起作用,请尝试按照示例 here 并使用

<system.web>
    <compilation debug="false" targetFramework="4.0">
</compilation>

改为

【讨论】:

  • 我自己通过反射器查看代码我不相信你是正确的。在我看来,它正在访问某种“全局编译状态”对象(这对我来说似乎更合乎逻辑)。我会进一步查看并回复。
  • @Maxim Gershkovich 更重要的是您是否尝试过更改此值并发现它不起作用?
  • @Maxim Gershkovich 更新了答案以反映 .net4 选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多