Microsoft.VisualBasic命名空间是否为“真正的.NET”代码?

我的开发团队正在准备开始一个新项目。 从VB3开始,这家商店一直是“VB商店”,但现在流行的观点是,我们是“.NET商店”,并且自C#专门为.NET创建,而VB.NET是一种改进,我们我决定只向前推写C#。 争议主要围绕Microsoft.VisualBasic命名空间在新开发中是否具有合法位置,或仅针对VB6(及更早版本)代码的向后兼容性这一问题展开。 另一个更有趣的问题是,Microsoft.VisualBasic命名空间下面的代码是否甚至是.NET代码,如果它真的是旧的VB运行时,它仔细打包在一个.NET包装器中,使得它实际上是一个COM互操作控件类似于WinForms包装非.NET Win32窗口化API但仅公开.NET API用于消费)。

为了使这更加令人困惑,我们的开发团队有一位Microsoft咨询服务顾问告诉我们,Microsoft不再支持Visual Basic, 包括Microsoft.VisualBasic命名空间下的VB运行时

我正在寻找的是链接 - 最好是无懈可击的微软资源 - 链接到能以某种方式明确回答这个问题的文档。 我已经在谷歌上尝试了几种搜索排列方式,但没有接近完成这个问题的底部。

编辑:显然我没有让我的问题清楚。 我不问VB.NET是否是真正的.NET代码。 我试图确定是否在Microsoft下的“。”之下.VisualBasic命名空间是.NET代码,或者是旧的VB6运行时仔细打包并公开为.NET代码。 有人已经说过,命名空间的9/10只是简单地从.NET的其他地方打包代码; 那另外1/10呢?


Microsoft.VisualBasic.dll <> Microsoft.VisualBasic.Compatibility.dll !!!

(或者,如果您愿意,Microsoft.VisualBasic.dll!= Microsoft.VisualBasic.Compatibility.dll;)

Microsoft.VisualBasic.Compatibility命名空间专供VB6升级向导使用,可能在未来的版本中删除,并且不应该用于新开发。

Microsoft.VisualBasic命名空间绝对是100%真实的.Net,完全支持,并且只要.Net就在其周围。

一些相关链接:

  • 讨论:Microsoft.VisualBasic是否被弃用?
  • 文章:用VB.NET实现纯.NET开发
  • 请参阅此MSDN VBFAQ博客文章的评论
  • 编辑:添加了这个MSDN文章的官方词汇:

    Visual Basic Runtime为全局Visual Basic函数和语言特性(如Len,IsDate和CStr)提供底层实现。 虽然新的Visual Basic Runtime提供了与其前任类似的功能, 但它完全是在公共语言运行库上执行的托管代码(使用Visual Basic .NET开发) 。 此外,Visual Basic Runtime是.NET Framework的一部分,所以它绝不是独立的,您的应用程序必须携带或部署。

    Visual Basic 6.0兼容性库与Visual Basic运行时不同。 将Visual Basic 6.0代码升级到Visual Basic .NET的工具使用Microsoft.VisualBasic.Compatibility命名空间。 它是支持Visual Basic 6功能的一个桥梁,它不直接受Visual Basic .NET实现的支持。 与Visual Basic运行时不同,兼容性库不是由所有Visual Basic .NET应用程序隐式引用的 。 当您将Visual Basic 6项目升级到Visual Basic .NET时,升级向导会添加对Microsoft.VisualBasic.Compatibility的引用。

    兼容性类不应该用于新的开发 。 Microsoft.VisualBasic.Compatibility命名空间为您的Visual Basic .NET应用程序增添了一层复杂性,并引入了一些可以通过重新编码应用程序部分来消除的最低性能成本。 另外,Compatibility命名空间通常包含许多包装COM对象的类,如前所述,依赖于COM对象并不像纯粹的托管实现那样优化。


    使用.NET Reflector并对其进行窥视。 我经常这样做。 Microsoft.VisualBasic命名空间中的10次调用中有9次只是.NET方法的包装。

    你的顾问正在做顾问最擅长的事情:炫耀自己的存在以使你的预算更大。 MS不再支持VB6,但VS 2008具有VB .NET的事实应该表明他们将支持VB .NET至少几年。

    就我个人而言,我将Microsoft.VisualBasic视为其他.NET类的外观。 我使用它是一个个人项目,与使用BCL课程相比,我可以更快,更轻松地完成我的工作。 与String.Substring相比,Microsoft.VisualBasic.Strings.Right就是一个很好的例子。 然而,对于VB命名空间中的许多函数(如Val),在框架的特定语言部分中有更强大和更强大的版本。 如果我正在编写工作代码,我不使用VB库。 这使得不熟悉VB的C#开发人员不会更难以理解我的代码。


    像FCL中的一些功能一样,一些Microsoft.VisualBasic命名空间代码是用托管代码编写的,其中一些代码将对非托管代码的调用封装起来。

    这绝对不依赖于vb6运行时,它肯定不会在引擎盖下安静地安装vb6运行时。

    您应该加载.NET Reflector并查看Microsoft.VisualBasic命名空间中的代码。

    如果你想继续在C#中使用这个命名空间的功能,那么继续这样做,它不会消失。 某些代码可能会被标记为已弃用/过时,但我预计在15年后您仍然可以使用Microsoft.VisualBasic功能运行相同的应用程序,而不会有任何问题。

    更新:与使用.NET反射器一样,您现在可以看到/调试源Microsoft.VisualBasic命名空间/Microsoft.VisualBasic.DLL代码:

    http://blogs.msdn.com/vbteam/archive/2008/01/19/source-code-of-visual-basic-runtime-has-been-released-to-public.aspx

    去抓住框架大众下载并仔细阅读代码:

    http://www.codeplex.com/NetMassDownloader

    链接地址: http://www.djcxy.com/p/9049.html

    上一篇: Is the Microsoft.VisualBasic namespace "true .NET" code?

    下一篇: Why aren't python nested functions called closures?