Код клиента OData v4 без Visual Studio - PullRequest
0 голосов
/ 16 января 2019

Генератор клиентского кода OData v4 (https://marketplace.visualstudio.com/items?itemName=bingl.ODatav4ClientCodeGenerator) сгенерирует прокси-класс, который мне нужен с помощью Visual Studio, но вместо этого мне нужно сгенерировать этот класс в моем коде C #.

Есть ли способ создать тот же прокси-класс в C # без использования Visual Studio?

1 Ответ

0 голосов
/ 05 февраля 2019

Изучите, как выполнять шаблоны T4 из C #
Запуск шаблона T4 с использованием C #
Программный шаблон текста T4
Можно ли использовать T4 программно из C #?

Короткий ответ заключается в том, что исполняемый файл Text Templating Transformation и связанные с ним среды выполнения распространяются вместе с Visual Studio, поэтому, хотя ваш код C # может выполнить процесс преобразования вручную, не упаковывая свой собственный анализатор и механизм преобразования, это в значительной степени работать только на ПК с установленной Visual Studio.

Не можете ли вы просто сгенерировать Client Proxy в dll на ПК, на котором установлена ​​VS, и использовать эту dll в своих приложениях, где у вас нет Visual Studio, например, в VS Code или других редакторах? Вы можете сгенерировать клиентский прокси с версией сообщества VS без особых проблем, если это является фактором.

Если вы контролируете API, то самое простое решение - создать новый проект в рамках решения API, поместить туда клиента T4 и просто заново сгенерировать клиент в рамках процесса развертывания, тогда другие приложения могут использовать клиентские DLL непосредственно.

Если вы не управляете проектом для API, обратитесь к разработчикам, чтобы узнать, сделали ли они это для вас!

Могут существовать другие альтернативы для изучения вместо использования клиентской библиотеки или во избежание необходимости регенерации во время выполнения. Если ваш код высокодинамичный с точки зрения некоторых элементов схемы, подумайте о написании собственного универсального прокси-сервера, который принимает строковые параметры или анонимные объекты и / или выражения, и вручную преобразовывает их в определенный синтаксис запроса OData для выполнения через WebClient. Способы достижения этой цели слишком сильно различаются, чтобы не вдаваться в подробности о вашем конкретном сценарии.

Рассматривайте ваши требования с другой точки зрения, клиентские прокси-серверы OData v4 пытаются реплицировать весь API, если только некоторые элементы API меняются быстрее, чем вы хотели бы перераспределить регенерированные прокси, вам нужно только найти решение для не-клиентского прокси только для тех элементов схемы, с которыми у вас возникли проблемы.

Вам не нужно использовать прокси-классы для взаимодействия с OData v4 API, скрипт T4 предоставляется в качестве ускорителя решения для быстрого кодирования API, вы не обязаны его использовать, но это полезно .

Там также могут быть сторонние приложения или библиотеки, которые вы можете упаковать в свое приложение, чтобы помочь вам достичь этого, однако выполнение клиентских прокси-классов T4 - это только половина работы, если вы делаете это во время выполнения, тогда вам также потребуется вручную скомпилировать эти сгенерированные классы, чтобы вы могли их выполнять.


Осознавая эту проблему, в наших приложениях, где мы создаем API службы, мы также генерируем клиентский прокси-сервер dll и делаем его доступным (через Nuget) для наших разработчиков или клиентов, которые могут захотеть взаимодействовать с API. Поэтому каждый раз, когда служба публикуется, мы используем сценарии в нашем CI (через DevOps Azure) для регенерации и публикации DLL API клиента при каждом повторном развертывании службы.

...