我的开发团队正准备开始一个新项目.自VB3时代以来,该商店一直是一个"VB商店",但现在流行的观点是我们是一个".NET商店",因为C#是专为.NET创建的,而VB.NET是一个改造,我们我决定继续前进写C#.争议围绕的问题是Microsoft.VisualBasic命名空间是否在新开发中具有合法位置,或者它是否仅用于VB6(及更旧)代码的向后兼容性.另一个更有趣的问题是,Microsoft.VisualBasic命名空间下的代码是否是.NET代码,如果它真的是在.NET包装器中精心打包的旧VB运行时,使其实际上是一个COM互操作控件(类似于WinForms如何包装非.NET Win32窗口API但仅暴露.
为了使这更令人困惑,我们的开发团队有一位Microsoft咨询服务顾问告诉我们Microsoft不再支持Visual Basic,包括Microsoft.VisualBasic命名空间下的VB运行时.
我正在寻找的是链接 - 最好是无懈可击的微软来源 - 链接到最终以这种或那种方式回答这个问题的文档.我已经在Google上尝试了几种搜索排列,并且没有更接近这个问题的底部.
编辑:显然我没有说清楚我的问题.我不是在问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运行时不同.Microsoft.VisualBasic.Compatibility命名空间由将Visual Basic 6.0代码升级到Visual Basic .NET的工具使用.它是支持Visual Basic的.NET实现不直接支持的Visual Basic 6功能的桥梁.与Visual Basic Runtime不同,所有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课程更快速,更轻松地完成工作.一个很好的例子是Microsoft.VisualBasic.Strings.Right与String.Substring相比.但是,对于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.codinghorror.com/blog/archives/000128.html