Подтвердить что ты не робот

Ошибка "Visual Basic 9.0 не поддерживает автоматически реализованные свойства" на интерфейсе в Visual Studio 2015 RC

Я открыл проект веб-сайта, который ранее был разработан в Visual Studio 2012 в 2015 году RC. Цель проекта:.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 нет. Сайт работает отлично под .net 3.5 как в xcopy, так и в опубликованных версиях.

Я также не понимаю, как бы я мог определить интерфейс любым другим способом. Может ли это быть ошибкой 2015/Roslyn?

Таргетинг .net 4.0 устраняет проблему, но это не вариант для развертывания на данный момент из-за некоторых внешних зависимостей. Я предполагаю, что потому, что за кулисами он нацелился на другой компилятор по Можно ли заставить Visual Studio 2010 использовать Visual Basic 10?

4b9b3361

Ответ 1

Это действительно является ошибкой в ​​компиляторе Roslyn. Компилятор работает в нечетном режиме, где его проверка (но не очень компиляция) кода внутри App_Code - этот код действительно компилируется при запуске сайта.

Поскольку он знает, что вы установили код для запуска под версией v3.5, он предполагает, что код будет фактически скомпилирован компилятором "v2.0", поэтому он эффективно запускает проверку/компиляцию, ve указал флаг /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 и выбрать игнорировать ошибки. Если это всего две ошибки, это может быть осуществимо в краткосрочной перспективе.

Ответ 2

В моем случае, используя сообщество VS2015, реальной проблемой была пустая строка между заголовком свойства и методом Get. Смотрите мои скриншоты ниже:

До: (Изображение ошибки)

введите описание изображения здесь

После: (Нет изображения ошибки)

введите описание изображения здесь

Ответ 3

У меня есть проект, который находится в процессе перехода VS2015 от VS2008. Мы должны поддерживать обе среды в краткосрочной перспективе, поэтому я создал VS015.vbproj файлы, которые включают директиву 9 в разделе PropertyGroup файла.

Я получал эту ошибку, потому что был комментарий между объявлением 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.

Ответ 4

Это может показаться тривиальным и OT, но если вы используете Visual Studio Community 2015 и вы нацеливаете .net 3.5, убедитесь, что продолжение строки "_" не было автоматически удалено.

VSC 2015 автоматически удаляет продолжение строки при редактировании, и нет возможности повторно вставить его обратно (я должен был сделать это за пределами VSC 2015). Кроме того, компилятор дает вам ошибку в этой строке, но редактор не подчеркивает ее.

Ответ 5

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

Ответ 6

В моем случае (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

Ответ 7

Ошибка сборки - это ошибка в компиляторе, а также в RTM для Visual Studio 2015. Установка обновления в Visual Studio 2015 RTM решила эту проблему для меня.

(Протестировано и проверено с обновлением RTM для Visual Studio 2015 и обновлением 3).