我不清楚的事情,我知道C#和VB.NET之间存在差异(主要是指针的使用)但是为什么如果两者都有一个Common CLR,XNA(例如)只能用于C#而不是VB.NET,或者是视觉工作室的添加内容是针对C#而不是VB.Net,实际上语言扩展都适用于

对不起,如果这是一个显而易见的问题,我想我会问

有帮助吗?

解决方案

CLR已被移植到各种平台,并非所有平台都是平等的。例如,XBox 360 CLR 没有Reflection.Emit甚至完整CLR所做的所有IL操作。因此,不同的编译器可能会发出在完整CLR上合法的IL代码,但在Compact CLR上是非法的。

另一个问题是类库的可用性。完整的BCL包括 Microsoft.VisualBasic 命名空间,这是由VB.NET编译器自动引用。这包含 VB6兼容性功能,< a href =“http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.myservices.aspx”rel =“nofollow noreferrer”>我的命名空间功能,以及一些编译器帮助函数,通常称为VB。 NET运行时。

每当移植CLR时,某些程序集都被移植 - 而其他程序集则不移植。对于XBox,Microsoft.VisualBasic未移植。这意味着您无法从该命名空间引用任何内容。虽然很容易不引用兼容性或My命名空间,但编译器服务可以插入到已编译的IL中而无需显式调用它们。

在VB.NET 8中,您可以传递未记录且不受支持的-novbruntimeref 切换到vbc.exe以防止它引用Microsoft.VisualBasic.dll。不幸的是,这有时会导致奇怪的编译错误。在VB.NET 9中,它已成为记录并支持并重命名为/ vbruntime

第三种情况是addins和Visual Studio支持。这取决于各个包,它们是否支持每种语言的模板,代码生成等。我相信一些第三方已经为XNA发布了VB.NET模板,尽管它是没有得到官方支持

我认为,底线是技术问题(CLR端口,BCL可用性,编译器IL输出)和支持(测试,资金和其他语言的插件)的混合。

其他提示

这是定义语言支持的工具集。例如,XNA只使用C#完成了所有工作,并且只提供了对它的支持。您仍然可以在VB.NET中编写应用程序并从命令行手动编译它。只要你的应用程序没有编译成任何非法的IL(XNA不支持的操作码),它仍然会运行。主要问题是资源 - 他们没有足够的人力来完全开发和测试所有语言,所以他们选择了一个。

从各方面来看,VB.NET和C#在CLR方面相当于99.9999。但是有些细微的差别可能会让你感到困惑。另外我还记得在一些微软博客上看到,CLR可以做的一些事情(可以通过VB.NET或C#编程)并且必须由IL完成。确实有趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top