我的开发团队正准备开始一个新项目。自从VB3时代以来,这个商店就是一个"VB商店“,但现在流行的观点是,我们是一个".NET商店”,既然C#是专门为.NET创建的,而VB.NET是一个翻新的版本,我们决定继续只编写C#。争论围绕着这样一个问题: Microsoft.VisualBasic名称空间在新的开发中是否具有合法的位置,或者它是否只是为了向后兼容VB6 (和更旧的)代码。另一个更有趣的问题是,Microsoft.VisualBasic命名空间下的代码是否真的是.NET代码,即它是否真的是精心包装在.NET包装中的旧VB运行时,使其实际上是COM互操作控件(类似于WinForms包装非.NET Win32窗口API,但只公开.NET API以供使用)。
更令人困惑的是,我们的开发团队有一位微软咨询服务顾问告诉我们,微软不再支持Visual Basic,,包括Microsoft.VisualBasic命名空间下的VB运行时。
我正在寻找的是链接--最好是到无可指摘的Microsoft来源的链接--指向以某种方式明确回答这个问题的文档。我已经在谷歌上尝试了几种搜索组合,但都没有找到这个问题的答案。
编辑:显然我没有把我的问题说清楚。我不是在问VB.NET是否是真正的.NET代码。我正在尝试确定“在”Microsoft.VisualBasic名称空间下的东西是不是.NET代码,或者是不是被仔细打包并公开为.NET代码的旧VB6运行时。有人已经说过,名称空间的9/10只是包装了.NET中其他地方的代码;那么其他1/10又如何呢?
发布于 2008-10-22 17:05:22
Microsoft.VisualBasic.dll <> Microsoft.VisualBasic.Compatibility.dll!
(或者,如果您愿意,可以使用Microsoft.VisualBasic.dll != Microsoft.VisualBasic.Compatibility.dll;)
Microsoft.VisualBasic.Compatibility命名空间仅供VB6升级向导使用,可能会在将来的版本中删除,并且永远不应用于新的开发。
Microsoft.VisualBasic名称空间绝对是100%真正的.Net,完全受支持,只要.Net存在,它就会一直存在。
以下是一些相关链接:
关于Is Microsoft.VisualBasic deprecated?的
编辑:添加来自this MSDN article的官方单词
Visual Basic运行库为全局Visual Basic函数和语言功能(如Len、IsDate和CStr )提供基础实现。尽管新的Visual Basic运行库提供了与其以前版本类似的功能,但它完全是在公共语言运行库上执行的托管代码(在Visual Basic .NET中开发)。此外,Visual Basic运行库是.NET框架的一部分,因此应用程序不必单独携带或部署它。
和
Visual basic6.0兼容性库与Visual Basic运行库不同。Microsoft.VisualBasic.Compatibility命名空间由将Visual basic6.0代码升级到Visual Basic .NET的工具使用。它是支持Visual basic6功能的桥梁,而Visual Basic的.NET实现不直接支持这些功能。与Visual Basic运行库不同,兼容性库并不是所有Visual Basic .NET applications都隐式引用的。将Visual basic6项目升级到Visual Basic .NET时,升级向导会添加对Microsoft.VisualBasic.Compatibility的引用。
对于新的开发,不应使用兼容性类。Microsoft.VisualBasic.Compatibility命名空间为Visual Basic .NET应用程序增加了一层复杂性,并引入了一些最小的性能成本,这些成本可以通过对应用程序的各个部分进行重新编码来消除。此外,兼容性命名空间通常包含许多包装COM对象的类,如前所述,依赖于COM对象并不像纯托管实现那样最佳。
发布于 2008-10-22 16:24:17
使用.NET反射器并窥视它。我经常这样做。Microsoft.VisualBasic名称空间中的10个调用中有9个只是.NET方法的包装器。
你的顾问正在做顾问最擅长的事情:炫耀他的存在是为了让你的预算更大。微软不再支持VB6,但VS2008有VB .NET的事实应该表明他们至少还会支持VB .NET几年。
就我个人而言,我对待Microsoft.VisualBasic就像对待其他.NET类的外观。当它是一个个人项目时,我会使用它,并且我可以比使用BCL类更快、更容易地完成工作。与String.Substring相比,Microsoft.VisualBasic.Strings.Right就是一个很好的例子。但是,对于VB名称空间中的许多函数(如Val),在框架的非特定语言部分中有更健壮和更强大的版本。如果我是为了工作而写代码,我不会使用VB库。这使得不熟悉VB的C#开发人员不会很难理解我的代码。
发布于 2008-10-22 16:30:08
与FCL中的某些功能类似,一些Microsoft.VisualBasic命名空间代码是用托管代码编写的,其中一些代码包装了对非托管代码的调用。
它当然不依赖于vb6运行时,也肯定不会悄悄地在引擎盖下安装vb6运行时。
您应该加载.NET反射器并查看Microsoft.VisualBasic名称空间中的代码。
如果您想继续在C#中使用此名称空间中的功能,那么继续这样做,它不会消失。有些代码可能会被标记为已弃用/过时,但我希望在15年内,您仍然可以使用Microsoft.VisualBasic功能运行相同的应用程序,而不会遇到任何问题。
更新:除了使用.NET反射器之外,您现在还可以查看/调试源Microsoft.VisualBasic命名空间/Microsoft.VisualBasic.DLL代码:
去获取框架的批量下载程序,并在空闲时仔细阅读代码:
https://stackoverflow.com/questions/226517
复制相似问题