【问题标题】:Restrict new language features of Visual Basic in Visual Studio 2015在 Visual Studio 2015 中限制 Visual Basic 的新语言功能
【发布时间】:2026-02-21 14:15:02
【问题描述】:

我目前正在与一个开发人员团队一起开发一个 Visual Basic 项目,其中一些人将能够在 Visual Studio 2015 发布后立即迁移到它,而一些人将在 Visual Studio 2013 上停留数年个月。在使用 RC 进行测试时,我们发现 Visual Studio 将毫无问题地打开 2013 项目,但会很高兴地让用户使用 VS 2013 中的用户不可用的新语言功能,例如字符串插值。如果 2015 用户签入此代码 2013 用户将收到编译错误。是否有任何项目、解决方案或 Visual Studio 设置会告诉编译器将功能限制为以前版本的 VB.net 中可用的功能?理想情况下,编译器在 2015 年尝试使用这些功能时应返回编译错误。

此功能在 C# 中的项目属性 > 构建 > 语言版本下可用,但我找不到 VB.net 的任何等效项,而且谷歌搜索失败了。

我只想提一下,将 .Net 运行时版本设置为 4.5 并没有帮助,因为这些新语言功能是编译器级别的功能,可以在旧框架上完美运行。

【问题讨论】:

标签: vb.net visual-studio visual-studio-2015


【解决方案1】:

没有设置语言版本的 UI 功能,但您可以卸载项目文件并将 <LangVersion>11</LangVersion> 添加到默认 Visual Basic 到 2012/2013 语言设置。 C# 项目在项目配置属性组下添加了这个属性,所以为了保持一致性,我在下面的示例中做了同样的事情。

C# 属性页做同样的事情,只是 C# 使用一组不同的版本号。

全套所有语言版本可以found here

2002 (VB 7.0)
2003 (VB 7.1)
2005 (VB 8.0)
2008 (VB 9.0)
2010 (VB 10.0)
2012 (VB 11.0)
2015 (VB 14)

刚刚测试过,这对我有用,但我确实必须将外壳更改为:

这会导致:

还有一个不错的构建失败:

【讨论】:

  • 它似乎对我不起作用,除非我将它添加到项目文件的错误部分。包括字符串插值在内的所有内容仍在使用此选项集进行编译。
  • Visual Studio 实际上是在抱怨项目文件中的元素。我尝试将其添加为 <Project> 的子级并包裹在 <PropertyGroup> 内。
  • 知道了!它实际上是区分大小写的 (<LangVersion>11</LangVersion>) 并且需要包裹在 <PropertyGroup>
  • 在 Visual Studio 2015 的实际发布版本中验证。谢谢!
  • 不是 - 我尝试添加它,但 VS 抱怨它是无效元素。