【发布时间】: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
我刚刚安装了 VS 2015 Community,在尝试访问托管在 IIS 中的 ASP.NET 应用程序(使用 ASP.NET v4.0 应用程序池)时,我收到了该错误消息。
我刚刚下载了 .NET Framework 4.6 离线安装程序,它可以识别安装并让我选择修复或删除它。我选择修复安装,但它没有解决任何问题。
我还有其他选择吗?
【问题讨论】:
标签: c# asp.net visual-studio
我通过运行以下命令行解决了这个问题: eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO "ASP.NET 4.6.81.0" /D "我的第一个日志"
【讨论】:
上面的答案在一定程度上是正确的,但是建议的修复方法并不理想。
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 版本的代码,而不是依赖于文件的版本。
例如
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
【讨论】:
上述错误的答案不是,去掉“WebMonitor.UnhandledExceptionModule”httpmodule。该模块用于捕获任何未处理的异常并将它们记录在 O/S EventLog 中。
正如它在错误消息中所说,它缺少服务器/机器中的 EventLog 源。
按照以下链接中的说明创建 EventLog 源,然后您可以摆脱错误,并使用 O/S Eventlog 记录从您的应用程序抛出的任何未处理的异常。
How to fix EventLog source missing error
祝你好运!
【讨论】:
试试这个:
导航到您的 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>
【讨论】: