为什么人们使用ProjectData
本文关键字:ProjectData 为什么 | 更新日期: 2023-09-27 18:05:55
最近我在网上看了一些编码。我发现有些人在catch
块中使用Microsoft.VisualBasic.CompilerServices.ProjectData.ProjectData
类。
catch (Exception exception1)
{
//ProjectData.SetProjectError(exception1);
Console.WriteLine(exception1.ToString());
Console.WriteLine();
Console.WriteLine(sSQL);
//ProjectData.ClearProjectError();
}
我在msdn上搜索了一下,上面提到这个API支持。net框架基础设施,不打算直接从你的代码中使用。
我很好奇人们为什么使用它。你能给我解释一下吗?
我的经验是这种类型的代码使用在c#/VB中找到。从VB6转换过来的。NET项目。在开发新的c#/VB时。. NET解决方案/项目,不应该使用这种做法。
注意:此技术可以安全地替换为适当的异常处理,您将习惯于在其他。net解决方案/项目中看到。
此代码要么是由将VB代码转换为c#的代码转换工具发出的,要么是由反编译最初使用VB创建的程序集产生的。
我正在移植一个VB项目到Mono,并发现VB编译器在任何捕获块中注入这些调用ProjectData.SetProjectError(exception)
和ProjectData.ClearProjectError()
,并试图找到一种方法来防止编译器这样做,因为Mono不实现ProjectData
模块。在做研究的时候发现了你的问题!
所以这是旧的遗留vb6的结果感兴趣的人。当vb6开始时,有一个err对象仍然存在,但已经移动到vb中的projectdata对象。如果有人像我一样记得vb6(这是回到恐龙漫游地球的时候),接下来有一个方便的小错误恢复调用。这是如果你不喜欢那些讨厌的小例外。大多数vb6程序都大量地使用它,瞧,你没有异常,因为你忽略了任何异常。下面是解释。
catch (Exception exception1)//捕获刚刚发生的任何异常
{
ProjectData.SetProjectError(exception1); // set the information
//在err对象中如果有人想要检查
ProjectData.ClearProjectError(); //clear the err object
}
正如你所看到的,完全忽略了任何异常,在真正的vb6时尚中,你的代码没有任何解释就爆炸了。不用说,如果有人写这样的代码或以这种方式使用vb,我会找到你,想办法把你关起来。