C# 使用MS异常处理块获取奇怪异常
我已经创建了一个非常基本的日志记录块和异常处理块。在我的代码中,我用以下代码测试了异常处理(我知道日志块可以工作):C# 使用MS异常处理块获取奇怪异常,c#,winforms,exception-handling,.net-3.5,enterprise-library,C#,Winforms,Exception Handling,.net 3.5,Enterprise Library,我已经创建了一个非常基本的日志记录块和异常处理块。在我的代码中,我用以下代码测试了异常处理(我知道日志块可以工作): public void RunScriptClean() { try { throw new FileNotFoundException(); } catch (FileNotFoundException ex) { var b = Ex
public void RunScriptClean()
{
try
{
throw new FileNotFoundException();
}
catch (FileNotFoundException ex)
{
var b = ExceptionPolicy.HandleException(ex, "Logging Policy");
if (b)
throw;
}
}
然而,在catch块的第一行,我遇到了一个冗长的异常,我的应用程序崩溃了:
发生异常:当前生成操作(生成密钥生成密钥[Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionPolicyImpl,Logging Policy])失败:无法解析类型“Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging,Version=4.1.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。请验证拼写是否正确或是否提供了完整的类型名称。(策略类型配置对象策略,索引2)。
当它说类型无法解析时,我完全不知道它指的是什么。我添加了对Microsoft.Practices.EnterpriseLibrary.Common/ExceptionHandling/Logging和Ms.Practices.ObjectBuilder2的引用。这个类的顶部包含使用Microsoft.Practices.EnterpriseLibrary.ExceptionHandling的
添加了查看我的AppConfig文件的配置工具的屏幕截图:
我肯定我遗漏了一些基本的东西,但是很难找到EAB 4.1的教程-CodeProject有很多关于原始版本的内容,但我不能充分利用它们
Edit我尝试创建一个新的格式化程序并将其命名为TextExceptionFormatter
,但这并没有改变任何事情。我不确定我的日志处理程序上的FormatterType
属性是如何绑定到该节点的
以及App.config中的实际XML块:
<exceptionHandling>
<exceptionPolicies>
<add name="Logging Policy">
<exceptionTypes>
<add type="System.Exception, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
postHandlingAction="NotifyRethrow" name="Exception">
<exceptionHandlers>
<add logCategory="General" eventId="100" severity="Error" title="Enterprise Library Exception Handling"
formatterType="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.TextExceptionFormatter, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
priority="0" useDefaultLogger="false" type="Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.LoggingExceptionHandler, Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Logging Handler" />
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies>
</exceptionHandling>
但是,即使更改了fullName
属性的版本段,我的应用程序的行为仍然相同。好的,我能够找到一个使用日志处理程序的示例应用程序。原来我需要一个对异常处理的引用。日志记录
Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging ****
Microsoft.Practices.EnterpriseLibrary.Logging
Microsoft.Practices.ObjectBuilder2
其中,我仅提及:
Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling
Microsoft.Practices.EnterpriseLibrary.Logging
Microsoft.Practices.ObjectBuilder2
该错误消息和屏幕截图都告诉您,您的引用有问题。异常消息包括显然不正确的PublicKeyToken=%token%”。您的配置似乎包含自己的异常,请看
Title`property值。我刚刚用它替换了token的值,对不起,它相当长,而且似乎是任意的。也许我错了!就“标题”而言,我真的不确定什么是属于那里的,我想那只是用作日志文件中条目的标题<代码>标题。这是日志条目的标题。默认值是企业库异常处理。如果愿意,您可以更改标题。
-MSDN。令牌值只是屏幕截图中的格式化程序类型。关于标题,我想说的是,从屏幕截图上看,当它试图解决这个问题时,它似乎抛出了一个异常。就个人而言,我从不使用配置工具,我只是查看实际的app.config。你能发布相关的细节吗?好的,编辑成包含实际的XML为什么你不使用最新版本的应用程序块6.0?很高兴你能找到它,祝你在这方面好运谢谢你指出这一点!如果其他人在EF 6中查找此程序集时遇到问题,您可以在Visual Studio的包管理器控制台中键入:PM>Install Package EnterpriseLibrary.ExceptionHandling.Logging