Сбой проекта Visual Studio, Добавляющего Подключенные службы с помощью Общего списка

#c# #asp.net-core #visual-studio-2019 #generic-list #connected-services

Вопрос:

В ан ASP.NET Основной проект веб-сайта 3.1 Я использую подключенные сервисы для устаревшего WFC. В VS я выбираю Добавить -> Подключенная служба. При добавлении службы я устанавливаю CollectionMappings в Generic.List, чтобы прокси создавал типы List<T> вместо массивов.

Сегодня я пошел обновить подключенную службу, что я обычно делаю, сначала удалив ее, а затем создав заново (опция редактирования/обновления отсутствует). Однако все изменилось. Добавить -> Подключенная служба исчезла — заменена на >Управление подключенными службами.

Но теперь при добавлении сервиса — несмотря на выбор «Generic.List» — прокси генерирует массивы. В результате чего тысяча строк моего кода теперь подчеркнута красным цветом.

Я поискал в Сети эту проблему и нашел несколько ссылок за 2010 год и несколько лет назад, но не смог найти никаких решений.

Сгенерированные классы все еще имеют [System.Runtime.Сериализация.Атрибут DataContract… поэтому я не думаю, что он использует XmlSerializer, который, по — видимому, не соблюдает настройки сопоставления коллекций.

Я также заметил, что версия Svcutil изменилась. Раньше это было 2.0.2, а теперь 2.0.3

 [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.2")]

[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3-preview3.21351.2")]
 

Единственное решение, которое я могу придумать на данный момент,-это вручную обновить Reference.cs файл и внести следующие изменения поиска/замены:

 System.Threading.Tasks.Task<T[]>
 

…чтобы:

 Task<System.Collections.Generic.List<T>
 

У кого-нибудь есть опыт в этом деле? Похоже, это ошибка в обновлении Svcutil (обратите внимание на предварительный просмотр3.21351.2). И если сопоставления коллекций больше не поддерживаются, почему они все еще отображаются в диалоговом окне?

Комментарии:

1. WCF действительно плохо сочетается с современным кодом на C#. Я рекомендую вам создать типы служб WCF-прокси и контрактов в отдельном .csproj проекте, а затем ссылаться на них в своем ASP.NET Основной проект. Но да, вероятно, есть проблемы с предварительной сборкой svcutil , которую вы каким-то образом используете.

2. Другой вариант-установить более старую версию VS, которая, как вы знаете, работала (установите ее на виртуальную машину, не рискуйте, что параллельные установки VS сломают вашу систему) и сгенерируйте код там, а затем скопируйте файлы.

3. @Dai спасибо за обратную связь — хорошие идеи для обхода проблем. Я думаю, что более старая версия VS на виртуальной машине, вероятно, проще всего. так раздражает, когда MS что-то ломает. Если бы мой клиент потратил деньги, я бы переписал их устаревший WCF в более современный базовый веб-API Restful. Но это большая работа, и им также придется обновлять клиентов, которые ее потребляют.

4. По крайней мере, это все еще оплачиваемые часы для вас, верно? 😀

5. @Dai да, конечно. Мне просто нужно сбросить ограниченное количество волос 🙂