我想要一些工具,最好是插入VS 2008/2010的工具,它将通过我的方法并添加关于它们可能抛出的异常的XML注释。我不希望为我生成<summary>
或其他XML标记,因为我会自己填写这些标记,但即使在private
/ protected
方法上我也会很好可以看出可以抛出哪些异常。否则,我发现自己会遍历这些方法并将其悬停在其中的所有方法调用中以查看异常列表,然后更新该方法的<exception
列表以包含这些方法。也许VS宏可以做到这一点?
来自:
private static string getConfigFilePath()
{
return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}
对此:
/// <exception cref="System.ArgumentException"/>
/// <exception cref="System.ArgumentNullException"/>
/// <exception cref="System.IO.IOException"/>
/// <exception cref="System.IO.DirectoryNotFoundException"/>
/// <exception cref="System.Security.SecurityException"/>
private static string getConfigFilePath()
{
return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}
更新:似乎该工具必须递归遍历这些方法,例如,method1调用method2,它调用method3,记录为throw NullReferenceException
,因此method2和method1都是该工具记录了同时抛出NullReferenceException
。该工具还需要消除重复项,例如,如果方法中的两个调用被记录为抛出DirectoryNotFoundException
,则该方法只会列出<exception cref="System.IO.DirectoryNotFoundException"/>
一次。
答案 0 :(得分:9)
长期和简短的回答是,这是不可能的。与Java不同,.NET语言都不要求函数报告可抛出的可能异常的列表(这意味着您必须捕获或报告可能在它调用的函数上抛出的任何异常)。因此,没有通用的方法来确定函数可以抛出的每个异常的详尽列表(我在这里使用函数一词来涵盖像函数一样写的任何东西,包括运算符,构造函数等等,因为您无法保证给定函数可能调用的异常。
如果你愿意进入有限的,那么可以想象你可以编写一些东西,可以扫描MSDN以获取给定.NET库调用的相应文章,并使用那里的例外列表(如果有的话)递归建立可能被抛出的清单。但是,这不会涵盖任何第三方库或捕获运行时抛出的任何异常(OutOfMemoryException
,StackOverflowException
,NullReferenceException
[除非您想更进一步,让您的异常分析也确定是否存在空引用的可能性,但这似乎也不可能完全通用的意义])。
我很确定C#团队已经花了一两次时间(如果Eric Lippert尚未就此问题回答过这个问题,我会感到惊讶),但我很确定它归结为:虽然这种系统对某些人非常有用且有价值,但强制它的使用(并强迫你报告或捕获所有可能引发的异常)导致了很多{{ 1}}为了避免内务管理,一揽子,无声的捕获比一个未报告的异常更糟糕(恕我直言)。
答案 1 :(得分:2)
您可以使用支持记录例外的AtomineerUtils来实现部分要求。
您还可以使用GhostDoc,Resharper和Agent Johnson Plugin来生成例外。请参阅以下问题: How to document thrown exceptions in c#/.net
答案 2 :(得分:1)
Exception Hunter会让你中途到达。它可以对代码进行静态分析,并向您展示哪些代码行(包括.NET Framework调用)将抛出哪些异常。它不会为您编写XML文档。
但是,我必须说,你需要对这样一个工具的实用程度有所了解......在极不寻常的情况下可能会发生一些例外情况,例如System.OutOfMemoryException
和System.ExecutionEngineException
,或程序员错误的结果,例如System.NotImplementedException
。从技术上讲,这些都是可能的,但实际上,尝试为每种方法记录大部分内容都不值得花时间......对于应用程序中的几乎所有方法,最终都会有数百行注释。
答案 3 :(得分:0)
RedGate Exception Hunter会分析代码以查找可能的异常。也许你可以使用它的一些功能。