繁体   English   中英

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

[英]Error "Visual Basic 9.0 does not support auto-implemented properties" on an interface in Visual Studio 2015 RC

我已经在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 确实消除了该问题,但由于某些外部依赖关系,目前这不是部署的选项。 我认为这是因为它在幕后针对不同的编译器, 是否可以强制 Visual Studio 2010 使用 Visual Basic 10?

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

之前:(错误图像

在此处输入图片说明

之后:(没有错误图像

在此处输入图片说明

这确实似乎是 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 不支持自动实现的属性”。 我们收到错误“无法初始化扩展属性。”。 但是,这没有意义

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

也就是说,一个单一的财产可以自动实现的或已展开。


我的建议是将尽可能多的代码移出App_Code - 无论是在它之外还是移到不同的库中。 这将意味着代码实际上是由 Roslyn 编译器直接编译的(并且没有/langversion设置),并且您实际上可以开始使用现代 VB 功能(您仍然可以针对 v3.5,但使用更高版本的语言功能)

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

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

我收到此错误是因为 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 中的编译器错误。

这可能看起来微不足道,但如果您使用的是 Visual Studio Community 2015 并且您的目标是 .net 3.5,请确保未自动删除行继续符“_”。

VSC 2015 在编辑时自动删除行延续,并且无法重新插入它(我必须在 VSC 2015 之外执行此操作)。 此外,编译器在该行上给您一个错误,但编辑器没有给它加下划线。

就我而言(VS2015、ASP.NET 应用程序、VB.NET、.NET 4.6),我已经通过删除过程声明和 Get 之间的空格解决了这个问题。 下面的代码段引发了“Visual Basic 12.0 不支持 ReadOnly 自动实现的属性”。

Public ReadOnly Property TestProp() As Integer

    Get
        Return 0
    End Get
End Property

下面的片段没有。

Public ReadOnly Property TestProp() As Integer
    Get
        Return 0
    End Get
End Property
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

就我而言,我不得不升级 .NET 框架。 它在 2.0 上,我将其升级到 4.0,之后我能够为

错误消失了

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM