web-dev-qa-db-ja.com

Visual Studio 2015RCのインターフェイスでエラー「VisualBasic9.0は自動実装されたプロパティをサポートしていません」

2015RCのVisualStudio2012で以前に開発されたWebサイトプロジェクトを開きました。プロジェクトは.net3.5を対象としています。

私はこのインターフェースを定義しています:

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

プロパティごとに次のビルドエラーが発生します:「BC36716Visual Basic9.0は自動実装されたプロパティをサポートしていません。」

Visual Studio 2012がこれに完全に満足している理由はわかりませんが、2015年はそうではありません。このWebサイトは、xcopyバージョンと公開バージョンの両方で.net3.5で正常に機能します。

また、他の方法でインターフェイスを定義する方法もわかりません。これは2015/Roslynのバグでしょうか?

.net 4.0をターゲットにすると問題は解決しますが、外部の依存関係があるため、現時点では展開のオプションではありません。これは、舞台裏で次のように別のコンパイラをターゲットにしているためだと思います Visual Studio2010にVisualBasic 10を使用させることは可能ですか?

16
Daz

これは確かに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は自動実装されたプロパティをサポートしていません」という2つのエラーメッセージではなく、 alsoは、「拡張プロパティを初期化できません。」というエラーを受け取ります。しかし、これはそうではありません 意味があります

自動実装されたプロパティを使用できず、代わりに標準または拡張されたプロパティ構文を使用する必要がある場合があります。

つまり、単一のプロパティをどちらかで自動実装または拡張できます。


私の推奨は、できるだけ多くのコードをApp_Codeから、コードのすぐ外または別のライブラリに移動することです。これは、コードが実際にRoslynコンパイラーによって直接(/langversion設定なしで)コンパイルされ、最新のVB機能を実際に使用できるようになることを意味します(引き続きv3.5をターゲットにしますが、後で使用します言語機能)

別の方法として、コードをApp_Codeに残し、エラーを無視することを選択できます。エラーが2つしかない場合は、短期的には実行可能かもしれません。

私の場合、VS2015コミュニティを使用した場合、実際の問題は、プロパティヘッダーとGetメソッドの間の空白行でした。以下の私のスクリーンショットを参照してください。

前:( エラー画像

enter image description here

後:( エラー画像なし

enter image description here

24
Rafael Neto

VS2008からVS2015を使用するように移行中のプロジェクトがあります。短期的には両方の環境をサポートする必要があるため、ファイルのPropertyGroupセクションにディレクティブ9を含むVS015.vbprojファイルを作成しました。

プロパティ宣言と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

「PrivateReadonly」行の前にコメントを移動すると、VS2015のコンパイラエラーが削除されました。

5
Terry Gibbs

これは些細でOTのように思えるかもしれませんが、Visual Studio Community 2015を使用していて、.net 3.5をターゲットにしている場合は、行の継続「_」が自動的に削除されていないことを確認してください。

VSC 2015は、編集時に行の継続を自動的に削除し、再挿入する方法はありません(VSC 2015の外部で行う必要がありました)。さらに、コンパイラーはその行にエラーを出しますが、エディターはそれを強調しません。

2
GDavoli

私の場合(VS2015、ASP.NETアプリ、VB.NET、.NET 4.6)、プロシージャ宣言とGetの間のスペースを削除することで解決しました。以下のスニペットは、「Visual Basic12.0は読み取り専用の自動実装プロパティをサポートしていません」を示しています。

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
1
GDavoli
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
0
Jim Marshall