错误" Visual Basic 9.0不支持自动实现的属性"在Visual Studio 2015 RC中的界面上

时间:2015-07-01 11:56:41

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

我已经开设了一个网站项目,该项目之前是在2015年RC中的Visual Studio 2012中开发的。该项目的目标是.net 3.5。

我定义了这个界面:

Public Interface ICurrentStep
    Property outerstep() As String
    Property innerstep() As String
End Interface

我为每个属性收到以下构建错误:" BC36716 Visual Basic 9.0不支持自动实现的属性。"

我不明白为什么Visual Studio 2012对此非常满意,但2015年却不是。在xcopy和已发布的版本中,该网站在.net 3.5下运行良好。

我也不明白如何以其他方式定义界面。这可能是2015 / Roslyn的错误吗?

定位.net 4.0确实可以解决问题,但由于某些外部依赖性,目前这不是部署的选项。我认为这是因为它在幕后根据Is it possible to force Visual Studio 2010 to use Visual Basic 10?

定位不同的编译器

8 个答案:

答案 0 :(得分:19)

就我而言,使用VS2015社区,真正的问题是属性标题和Get方法之间的空白行。请参阅下面的屏幕截图:

之前:(Error image

enter image description here

之后:(No error image

enter image description here

答案 1 :(得分:9)

这确实似乎是Roslyn编译器中的一个错误。编译器以奇数模式运行,它检查(但不是真正编译)App_Code中的代码 - 该代码在站点启动时实际编译。

由于它知道您已将代码设置为在v3.5下运行,因此它假定代码实际上将由" v2.0"编译器,因此它有效地运行检查/编译,就像您已将/langversion标志指定为9一样。

因此,这就是为什么错误消息是在讨论Visual Basic 9不支持的内容。但是,如果使用真正的VB9编译器编译代码,它当然可以很好地编译。

作为编译器相当困惑的证据,我将您的示例更改为:

Public Interface ICurrentStep
    Property outerstep() As String = "Hello"
    Property innerstep() As String
End Interface

这会产生一个关于不允许接口中的初始化器的错误。但是,不是只有两条错误消息说明" Visual Basic 9.0不支持自动实现的属性。"我们得到错误"扩展属性无法初始化。"。但是,这不是make sense

  

在某些情况下,您无法使用自动实现的属性,而必须使用标准或扩展的属性语法。

也就是说,单个属性可以自动实现或扩展

我的建议是尽可能多地从App_Code移出代码 - 或者在其外部或者移动到不同的库中。这将意味着代码实际上是由Roslyn编译器直接编译的(并且没有/langversion设置)并且您实际上可以开始使用现代VB功能(您仍然可以使用v3.5,但稍后使用< em>语言功能)

或者,您可以将代码保留在App_Code中,然后选择忽略错误。如果它只是两个错误,那么短期内可能是可行的。

答案 2 :(得分:5)

我有一个项目正在从VS2008转向使用VS2015。我们需要在短期内支持这两种环境,因此我创建了包含该指令的VS015 .vbproj文件 9 在文件的PropertyGroup部分。

我收到此错误是因为Property声明和Get子句之间存在注释。 例如

Private ReadOnly Property MemberNode() As XmlNode</br>
    ' This is the only place which locates the objMember node
    Get
        Return CreatePathAndNode(mnodMessage, "objData/colMember/objMember")
    End Get 
End Property

在“Private Readonly”行之前移动注释会删除VS2015中的编译器错误。

答案 3 :(得分:1)

这可能看起来微不足道,但是如果你正在使用Visual Studio Community 2015并且你正在瞄准.net 3.5,请确保行继续&#34; _&#34;尚未自动删除。

VSC 2015会在编辑时自动删除续行,并且无法重新插入(我必须在VSC 2015之外执行此操作)。此外,编译器在该行上给出了错误,但编辑器没有强调它。

答案 4 :(得分:0)

Public Interface ICurrentStep
    Private _outerstep As String
    Property outerstep() As String
        Get
            Return _outerstep
        End Get
        Set(ByVal value As String)
            _outerstep = value
        End Set
    End Property
End Interface

答案 5 :(得分:0)

在我的情况下(VS2015,ASP.NET应用程序,VB.NET,.NET 4.6)我通过删除过程声明和Get之间的空格来解决它。 下面的代码段引发了&#34; Visual Basic 12.0不支持ReadOnly自动实现的属性。&#34;

$()

下面的代码段没有。

Public ReadOnly Property TestProp() As Integer

    Get
        Return 0
    End Get
End Property

答案 6 :(得分:0)

就我而言,我必须升级.NET框架。它在2.0上,我将其升级到4.0,之后我就可以为其添加程序集引用

错误消失了

答案 7 :(得分:-1)

构建错误是编译器中的错误,也是Visual Studio 2015 RTM中的错误。 安装Visual Studio 2015 RTM更新为我解决了这个问题。

(使用Visual Studio 2015 RTM Update 1和Update 3进行测试和验证。)