问题 如何在Visual Studio 2015中更改VB.NET语言版本


在Visual Studio 2015中,可以选择编码哪种版本的C#语言,如图所示 这里

我正在为VB.NET寻找相同的选项 - 我如何限制旧的VB.NET版本的语法等?

我想这样做,以便我在与我共享的项目中意外停止使用VB 14功能 的Visual Studio 2012。我宁愿不通过Visual Studio 2012安装向我的机器发送垃圾邮件,也不必为相当偶然的要求创建新的VM。

注意:我不想更改目标.NET Framework版本。


1157
2017-08-20 15:43


起源



答案:


VB.NET编译器有 / langversion 选项。 MSBuild也支持。但是不是IDE,这使得改变它变得尴尬。

仍然可以,你必须编辑.vbproj文件。使用文本编辑器,记事本会这样做。并复制/粘贴此代码段,将其插入第4行,以便它对所有配置和平台都有效:

  <PropertyGroup>
     <LangVersion>12</LangVersion>
  </PropertyGroup>

并仔细检查它是否有效:

Module Module1
    Sub Main()
        Dim test As String
        Console.WriteLine(NameOf(test))
    End Sub
End Module

输出:

error BC36716: Visual Basic 12.0 does not support 'nameof' expressions.

嗯,这有效,也被IntelliSense标记为红色波浪线。您可能想要创建自己的项目模板,因此您不必一次又一次地执行此操作。使用文件>导出模板。


12
2017-08-20 16:17



我会对此进行测试。它似乎仍然允许Readonly Auto属性。你也看到了吗? - Jon Egerton
我可以重复一遍。请注意,这不会经常受到测试,connect.microsoft.com是报告此类错误的好地方。 - Hans Passant
我将测试所有新的VB14功能并报告连接。 - Jon Egerton
被提出来了 这里 如果你不想投票。目前还不确定是否应该在Connect或开源项目区域中记录内容。 - Jon Egerton
我投了票。现在跟踪了这个 罗斯琳的小虫,已于1月21日结束。 - Hans Passant


答案:


VB.NET编译器有 / langversion 选项。 MSBuild也支持。但是不是IDE,这使得改变它变得尴尬。

仍然可以,你必须编辑.vbproj文件。使用文本编辑器,记事本会这样做。并复制/粘贴此代码段,将其插入第4行,以便它对所有配置和平台都有效:

  <PropertyGroup>
     <LangVersion>12</LangVersion>
  </PropertyGroup>

并仔细检查它是否有效:

Module Module1
    Sub Main()
        Dim test As String
        Console.WriteLine(NameOf(test))
    End Sub
End Module

输出:

error BC36716: Visual Basic 12.0 does not support 'nameof' expressions.

嗯,这有效,也被IntelliSense标记为红色波浪线。您可能想要创建自己的项目模板,因此您不必一次又一次地执行此操作。使用文件>导出模板。


12
2017-08-20 16:17



我会对此进行测试。它似乎仍然允许Readonly Auto属性。你也看到了吗? - Jon Egerton
我可以重复一遍。请注意,这不会经常受到测试,connect.microsoft.com是报告此类错误的好地方。 - Hans Passant
我将测试所有新的VB14功能并报告连接。 - Jon Egerton
被提出来了 这里 如果你不想投票。目前还不确定是否应该在Connect或开源项目区域中记录内容。 - Jon Egerton
我投了票。现在跟踪了这个 罗斯琳的小虫,已于1月21日结束。 - Hans Passant


如果你正在使用 ReSharper的 事实证明这是一个选择:

  • 左键单击解决方案资源管理器中的项目
  • 选择“属性”窗口(而不是“项目属性” - 您希望属性捕捉)
  • 在ReSharper选项下,有一个“VB语言级别”选项,它提供了返回VB.NET 8的选项。

我没有测试过它的效果如何。


3
2017-08-20 16:17





使用VB时我不认为这是可能的。

看到这个相关的连接错误: 连接:即使web.config将VB 8指定为编译器,VB 14编译器也会删除行继续


0
2017-08-20 16:05



你认为通过扩展到VS可以重现C#功能吗? - Jon Egerton
刚刚注意到ReSharper可以做到 - 请参阅我的回答。 - Jon Egerton