Asp.net “错误”;Visual Basic 9.0不支持自动实现的属性;关于Visual Studio 2015 RC中的接口
我已经打开了一个网站项目,该项目之前是2015年在Visual Studio 2012中开发的。该项目的目标是.NET3.5 我定义了这个接口: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
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