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





Investigate how to execute T4 templates from C#
Running a T4 template using C#
Run T4 text template programmatically
Can I use T4 programmatically from C#?
Короткий ответ заключается в том, что исполняемый файл Text Templating Transformation и связанные с ним среды выполнения распространяются вместе с Visual Studio, поэтому, хотя ваш код C# может вручную выполнить процесс преобразования, без упаковки собственного анализатора и механизма преобразования он в значительной степени собирается только работать на ПК с установленной Visual Studio.
Can you not simply generate the Client Proxy into a dll on a PC that does have VS installed and use that dll in your applications where you do not have visual studio, such as within VS Code or other editors? You can generate the client proxy with the community edition of VS without too many issues if that is a factor.
Если вы управляете API, то самое простое решение - создать новый проект в рамках решения API, поместить туда клиент T4 и просто регенерировать клиента как часть процесса развертывания, тогда другие приложения могут напрямую использовать клиентскую dll.
Если вы не контролируете проект для API, свяжитесь с разработчиками, чтобы узнать, делают ли они это за вас!
Могут быть другие альтернативы, которые следует изучить вместо использования клиентской библиотеки или избежать необходимости повторной генерации во время выполнения. Если ваш код очень динамичен с точки зрения некоторых элементов схемы, подумайте о написании собственного универсального прокси, который принимает строковые параметры или анонимные объекты и / или выражения, и вручную преобразует их в конкретный синтаксис запроса OData для выполнения через WebClient. Способы достижения этого слишком сильно различаются, чтобы вдаваться в подробности о вашем конкретном сценарии.
Consider your requirement from a different point of view, the OData v4 client proxies try to replicate the entire API, if only some elements of the API are changing faster than you would like to re-distribute the regenerated proxies then you only need to find a non-client proxy solution for just the elements of the schema that you are experiencing problems with.
Вам не нужно использовать прокси-классы для связи с API OData v4, сценарий T4 предоставляется в качестве ускорителя решения, чтобы вы могли быстро кодировать с помощью API, вы не обязаны его использовать, но это полезно.
Также могут быть сторонние приложения или библиотеки DLL, которые вы можете упаковать в свое приложение, чтобы помочь вам достичь этого, однако выполнение классов прокси клиента T4 - это только половина работы, если вы сделаете это во время выполнения, вам также потребуется вручную скомпилировать эти сгенерированные классы, чтобы вы могли их выполнять.
Осознавая эту проблему, в наших приложениях, где мы создаем сервисный API, мы также генерируем клиентскую прокси-библиотеку dll и делаем ее доступной (через Nuget) нашим разработчикам или клиентам, которые могут захотеть взаимодействовать с API. Таким образом, каждый раз, когда служба публикуется, мы используем сценарии в нашем CI (через Azure DevOps) для восстановления и публикации DLL клиентского API при повторном развертывании службы.