为什么人们使用ProjectData

时间:2013-03-26 20:43:25

标签: c#

最近我在网上查看了一些编码。我发现有些人在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 Framework基础结构,并不打算直接在您的代码中使用。

我很好奇人们使用它的原因。你能解释一下吗?

3 个答案:

答案 0 :(得分:8)

我的经验是,在从VB6转换的c#/ VB.NET项目中可以找到这种类型的代码。在开发新的c#/ VB.NET解决方案/项目时,不应该使用这种做法。

注意:此技术可以安全地替换为您将在其他.NET解决方案/项目中看到的适当异常处理。

答案 1 :(得分:4)

此代码由将VB代码转换为C#的代码转换工具发出,或者由反编译最初使用VB创建的程序集生成。

我将VB项目移植到Mono,发现VB编译器在任何catch块中注入了这些调用ProjectData.SetProjectError(exception)ProjectData.ClearProjectError(),并试图找到一种方法来防止编译器这样做是因为Mono没有实现ProjectData模块。在做我的研究时发现了你的问题!

答案 2 :(得分:2)

所以这是旧版传统vb6的结果。当vb6开始时,有一个错误的对象仍在,但已移动到vb中的projectdata对象。如果像我这样的人记得vb6(这是恐龙在地球上漫游的时候回来的话),接下来就会有一个方便的小错误。如果你不喜欢那些讨厌的小例外。大多数vb6程序大量使用它,瞧你没有例外,因为你忽略了任何。所以这里有解释。

catch(异常exception1)//捕获刚刚发生的任何异常

    {

        ProjectData.SetProjectError(exception1); // set the information 

//在错误的对象中,如果有人想要检查

        ProjectData.ClearProjectError(); //clear the err object
    }

正如您所看到的,这完全忽略了任何异常,并且以真正的vb6方式,您的代码只会在没有任何解释的情况下爆炸。不用说,如果有人写这样的代码或以这种方式使用vb,我会找到你并找出让你被监禁的方法。

相关问题