【问题标题】:There is no EventLog source named 'ASP.NET 4.6.81.0'. This module requires .NET Framework 2.0没有名为“ASP.NET 4.6.81.0”的 EventLog 源。此模块需要 .NET Framework 2.0
【发布时间】:2015-07-27 17:31:56
【问题描述】:

我刚刚安装了 VS 2015 Community,在尝试访问托管在 IIS 中的 ASP.NET 应用程序(使用 ASP.NET v4.0 应用程序池)时,我收到了该错误消息。

我刚刚下载了 .NET Framework 4.6 离线安装程序,它可以识别安装并让我选择修复或删除它。我选择修复安装,但它没有解决任何问题。

我还有其他选择吗?

【问题讨论】:

    标签: c# asp.net visual-studio


    【解决方案1】:

    我通过运行以下命令行解决了这个问题: eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO "ASP.NET 4.6.81.0" /D "我的第一个日志"

    【讨论】:

    • 我认为这是真正的答案
    【解决方案2】:

    上面的答案在一定程度上是正确的,但是建议的修复方法并不理想。

    UnhandledExcepton 模块是第三方代码,其来源在CodePlex。它的目的是捕获未处理的异常并将它们记录在某处。它可能很有用,因此删除它并不能真正解决这个问题。

    此外,创建“ASP.NET 4.6.81.0”的事件日志源并不是真正的修复。它可能会帮助您解决此处显示的问题,但它很可能会在下次更新 .NET 框架时再次中断。

    如果您查看源代码,您会发现该模块正在使用 .NET 框架附带的程序集版本 (WebEngine.dll) 来查找要使用的事件日志源的名称。该文件可以在取决于框架版本和“位数”的运行时目录中找到。例如

    C:\Windows\Microsoft.NET\Framework\v4.0.30319\WebEngine.dll
    

    违规代码是:

    string webenginePath = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "webengine.dll");
    

    FileVersionInfo ver = FileVersionInfo.GetVersionInfo(webenginePath);
    sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0", ver.FileMajorPart, ver.FileMinorPart, ver.FileBuildPart);
    

    如果此日志源不存在,则抛出错误。

    现在发生这种情况的原因是 .NET 4.6 是 .NET 4.5 的替代品,而不是并行安装。安装已将 WebEngine.dll 替换为新版本 4.6.81.0。 .NET 4.5.2 中的先前版本是 4.0.30319(与 CLR 版本相对应)。

    AP.NET 4.6.81.0”没有事件日志源,因此出现错误。

    UnhandledException 模块的原作者应该使用了返回 CLR 版本的代码,而不是依赖于文件的版本。

    例如

    System.Environment.Version

    Major  Minor  Build  Revision
    -----  -----  -----  --------
    4      0      30319  34209
    

    如果寻找环境版本的字符串改为使用它,那么它将继续与框架 4.6 一起使用。当然,这并不能保证它会在以后的版本中继续工作,但它会比文件版本更安全。

    因此,答案是更改 UnhandledExceptionModule 中的代码来执行此操作,重新编译它并相应地更新您的引用。

    例如

    _sourceName = string.Format(CultureInfo.InvariantCulture, "ASP.NET {0}.{1}.{2}.0",System.Environment.Version.Major, System.Environment.Version.Minor, System.Environment.Version.Build);
    

    2015 年 12 月 4 日更新:我已经修复了这个问题,并将违规类的新版本上传到原始的 codeplex 站点。原作者似乎不再在该站点上活跃,因此我不希望补丁被合并到源代码管理中,但是任何人都可以使用它。 See the issue describing the problem and the linked patch

    【讨论】:

      【解决方案3】:

      上述错误的答案不是,去掉“WebMonitor.UnhandledExceptionModule”httpmodule。该模块用于捕获任何未处理的异常并将它们记录在 O/S EventLog 中。

      正如它在错误消息中所说,它缺少服务器/机器中的 EventLog 源。

      按照以下链接中的说明创建 EventLog 源,然后您可以摆脱错误,并使用 O/S Eventlog 记录从您的应用程序抛出的任何未处理的异常。

      How to fix EventLog source missing error

      祝你好运!

      【讨论】:

        【解决方案4】:

        试试这个:

        导航到您的 web.config 并找到此块:

        <httpModules>
                <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
                <add type="WebMonitor.UnhandledExceptionModule" name="UnhandledExceptionModule"/>
            </httpModules>
        

        将上面的内容改为如下:

        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </httpModules>
        

        【讨论】:

        • 什么...?是的,这解决了问题。你知道那里到底发生了什么(除了它无法写入事件日志之外?)有没有办法缓解,或者那个特定的模块甚至是必要的?顺便说一句,感谢您在这里输入。
        猜你喜欢
        • 2011-06-28
        • 2014-09-13
        • 2017-04-01
        • 2019-04-28
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 2023-03-18
        • 2016-10-09
        相关资源
        最近更新 更多