Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net “错误”;Visual Basic 9.0不支持自动实现的属性;关于Visual Studio 2015 RC中的接口_Asp.net_Vb.net_Visual Studio 2015 - Fatal编程技术网

Asp.net “错误”;Visual Basic 9.0不支持自动实现的属性;关于Visual Studio 2015 RC中的接口

Asp.net “错误”;Visual Basic 9.0不支持自动实现的属性;关于Visual Studio 2015 RC中的接口,asp.net,vb.net,visual-studio-2015,Asp.net,Vb.net,Visual Studio 2015,我已经打开了一个网站项目,该项目之前是2015年在Visual Studio 2012中开发的。该项目的目标是.NET3.5 我定义了这个接口: Public Interface ICurrentStep Property outerstep() As String Property innerstep() As String End Interface 每个属性都会出现以下生成错误:“BC36716 Visual Basic 9.0不支持自动实现的属性。” 我不明白为什么Vi

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

我定义了这个接口:

Public Interface ICurrentStep
    Property outerstep() As String
    Property innerstep() As String
End Interface
每个属性都会出现以下生成错误:“BC36716 Visual Basic 9.0不支持自动实现的属性。”

我不明白为什么VisualStudio2012对此非常满意,但2015却不是。该网站在.NET3.5下的xcopy和发布版本都运行良好

我也不明白如何用其他方式定义接口。这可能是2015/Roslyn的错误吗


以.net 4.0为目标确实解决了这个问题,但由于某些外部依赖性,目前还不能进行部署。我猜想这是因为在幕后,它针对的是另一个编译器,这确实是Roslyn编译器中的一个bug。编译器在一种奇怪的模式下运行,它检查(但不是真正编译)App_code中的代码-该代码实际上是在站点启动时编译的

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

因此,这就是为什么错误消息所说的是VisualBasic9不支持的内容。但是,如果使用真正的VB9编译器编译代码,它当然可以编译得很好

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

Public Interface ICurrentStep
    Property outerstep() As String = "Hello"
    Property innerstep() As String
End Interface
这将产生一个错误,即不允许在接口中使用初始值设定项。但是,不是只有两条错误消息声明“VisualBasic9.0不支持自动实现的属性”。我们还收到错误“扩展的属性无法初始化”。但是,这并不是:

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

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


我的建议是将尽可能多的代码移出
App\u code
——要么就移出它,要么移到另一个库中。这将意味着代码实际上是由Roslyn编译器直接编译的(并且没有
/langversion
设置),并且您可以实际开始使用现代VB功能(您仍然可以针对v3.5,但使用更高版本的语言功能)


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

这可能看起来很琐碎,但如果您使用的是Visual Studio Community 2015,并且您的目标是.net 3.5,请确保没有自动删除行延续“\u1”


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

在我的例子中,使用VS2015社区,真正的问题是属性头和
Get
方法之间有一个空行。请参见下面我的屏幕截图:

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
之前:()

之后:()


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

我得到这个错误是因为在属性声明和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
私有只读属性MemberNode()作为XmlNode
'这是唯一定位objMember节点的位置 得到 返回CreatePathAndNode(mnodMessage,“objData/colMember/objMember”) 结束 端属性
将注释移到“Private Readonly”行之前会删除VS2015中的编译器错误。

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

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

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

下面的代码段没有

Public ReadOnly Property TestProp() As Integer
    Get
        Return 0
    End Get
End Property

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


错误消失了

当我将代码放入VB项目时,我得到错误“BC30273'Public'在接口属性声明中无效”@Damien_the_unsiver抱歉-粘贴了我试图修复的一个代码变体。已编辑。在我将代码放入网站的
App\u code
文件夹之前,我无法复制此代码-对您来说也是这样吗?我还有一个扩展的例子,它让我认为这是一个Roslyn bug。(如果将“=”Hello“`添加到属性之一,我们会得到额外的错误“扩展属性无法初始化”-因此编译器认为这些属性有两个不同且矛盾的地方-它们是自动实现的,并且被扩展)是的,这是在App_代码的子文件夹中。我想我最好的办法是把他们拉到另一个集会上。我会试试看…@Damien_不信者欢呼,伙计,这确实解决了问题。如果您想将其作为答案提出,我将很高兴授予您代表。最好添加一些解释。我有此错误,我没有评论,但有一个空行,删除它解决了错误。是的,非常奇怪
Public ReadOnly Property TestProp() As Integer
    Get
        Return 0
    End Get
End Property