我有这个接口定义:
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 bug吗?
定位.net 4.0确实消除了问题,但是由于某些外部依赖关系,这不是目前部署的一个选择.我认为这是因为幕后的目标是根据Is it possible to force Visual Studio 2010 to use Visual Basic 10?不同的编译器
解决方法
因为它知道你已经将代码设置为在v3.5下运行,所以它假设代码实际上是由“v2.0”编译器编译的,所以它有效地运行check / compile,就像你指定了/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:
there are situations in which you cannot use an auto-implemented property and must instead use standard,or expanded,property Syntax.
我的建议是将尽可能多的代码移出App_Code,或者在其外部或不同的库中.这将意味着代码实际上是由Roslyn编译器直接编译(而不是/ langversion设置),并且您实际上可以开始使用现代VB功能(您仍然可以定位v3.5但使用以后的语言功能)