Код VB.NET WCF выдает ошибку «Спецификатор атрибута не полный оператор» в VS2017 - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно поддержать некоторый устаревший код, который написан на VB.NET.Это решение WCF, которое в настоящее время работает в производстве.Однако, когда я клонирую репо и загружаю его в VS2017 Build 15.8.5, я не вижу никаких проблем с синтаксисом.Нет красных волнистых линий.Но когда я перестраиваю решение, я получаю ошибки сборки в окне «Вывод», но никаких ошибок в списке ошибок.

Вот часть моего окна вывода.

3>Building directory '/App_Code/'.
3>
3>..\ICDI_WCFService.vb(20,0): error BC32035: Attribute specifier is not a complete statement. Use a line continuation to apply the attribute to the following statement.
3>..\ICDI_WCFService.vb(29,0): error BC30604: Statement cannot appear within an interface body. End of interface assumed.
3>..\ICDI_WCFService.vb(30,0): error BC30001: Statement is not valid in a namespace.
3>..\ICDI_WCFService.vb(44,0): error BC30289: Statement cannot appear within a method body. End of method assumed.

А вот пример исходного кода, на который ссылаются сообщения об ошибках

<ServiceContract()>
Public Interface IIMb
    ''' <summary>
    ''' Used only to expose unused types. 
    ''' <para>WCF does not pass through any classes/enums/etc. that are not explicitly used as either input or ouput of a method</para>
    ''' <para>So, to expose those types, this method was created.</para>
    ''' </summary>
    ''' <param name="imbMailClasses"></param>
    ''' <remarks></remarks>
    <OperationContract()>
    Sub ExposesUnusedTypes(ByVal imbMailClasses As MAILPiece.IMb.MailClasses)

    ''' <summary>
    ''' Creates IMb PICs for Basic Confirm.
    ''' <para>NOTE: Removes one Address_Only Transaction Count per PIC generated.</para>
    ''' </summary>
    ''' <param name="authHeader"></param>
    ''' <param name="userID"></param>
    ''' <param name="amount"></param>
    ''' <param name="barcodeIdentifier"></param>
    ''' <param name="classAndAddressCorrectionOption"></param>
    ''' <returns>Array [String]</returns>
    ''' <remarks></remarks>
    <OperationContract()>
    Function CreatePICs_BasicConfirm(ByVal authHeader As AuthHeader, ByVal userID As Integer, ByVal amount As Integer,
                                     ByVal barcodeIdentifier As MAILPiece.IMb.BarcodeIdentifiers,
                                     ByVal classAndAddressCorrectionOption As MAILPiece.IMb.ClassAndAddressCorrectionOptions_Basic_Confirm) As String()

Он работает как и не используется правильно, но, как я уже сказал, этот код работает долго, поэтому мне интересно, нет ли проблемы с VS2017

Сотрудник клонировал тот же репозиторийв сборку VS2017 15.4.0 и имел ту же проблему.

Последний раз она работала в VS2017 этой весной, поэтому она была преобразована из VS2015 в VS2017, но я должен предположить, что это была версия ранее, чем VS2017build 15.4.0

Однако с тех пор я установил .NET Core 2.x SDK на свой ноутбук DEV.

Прежде чем приступить к настройке чистого ноутбука с помощью VS2017 Build 15.0Я хотел посмотреть, сталкивался ли кто-нибудь с этой проблемой.

Есть идеи?

ОБНОВЛЕНИЕ 1

Это устаревшее решение использует проект веб-сайта VB для службы WCF (оболочка?) И не имеет файла vbproj.

Есть другие проекты в решении, на которые ссылается этот проект веб-сайта, у которых есть файлы vbproj (и у них нет настройки LangVersion), но у этого нет.Однако я могу щелкнуть правой кнопкой мыши имя проекта и выбрать «Редактировать свойства элемента проекта», и я вижу, что VB Language Level установлен по умолчанию.Я попытался установить его в Visual Basic .NET 15, и в ошибках не было никакой разницы.

Если я пытаюсь добавить подчеркивание (для продолжения строки) после атрибута, is исчезает, как только я выхожу изline.

Screenshot of project right-click menu

Обновление 2

Подсвеченный элемент CDI_WCFService3 на изображении обозревателя решений выше выглядит следующим образомдолжен быть проект с файлом vbproj, но в самой папке нет файла vbproj.Существует файл web.config, и в этом файле web.config находится раздел, показанный ниже;

Это единственное, что даже упоминает VB.

Вот скриншот структуры папки.

project folder

1 Ответ

0 голосов
/ 28 сентября 2018

Похоже, что при сборке используется компилятор из VS 2008, который не поддерживает неявные продолжения строк.Или, по крайней мере, текущий компилятор с установленным параметром компилятора langversion .В ссылочной документации говорится, что это опция только для командной строки, но включение следующего в файл MSBuild (ProjectName.vbproj) воспроизведет вашу проблему в VS 2017:

  <PropertyGroup>
    <LangVersion>9.0</LangVersion>
  </PropertyGroup>

Поэтому проверьте файл vbproj, чтобы увидетьесли вышеупомянутое как-то было добавлено в файл.Кроме того, если у вас есть файл «Directory.Build.props» (см .: Настройка вашей сборки ), проверьте и этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...