为什么人们使用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框架基础设施,不打算直接从你的代码中使用。

我很好奇人们为什么使用它。你能给我解释一下吗?

为什么人们使用ProjectData

我的经验是这种类型的代码使用在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,我会找到你,想办法把你关起来。