OData v4客户端代码生成器(https://marketplace.visualstudio.com/items?itemName=bingl.ODatav4ClientCodeGenerator)将使用Visual Studio生成我需要的代理类,但是我需要在C#代码中生成该类。
有没有一种方法可以在不使用Visual Studio的情况下用C#生成相同的代理类?
答案 0 :(得分:0)
研究如何从C#执行T4模板
Running a T4 template using C#
Run T4 text template programmatically
Can I use T4 programmatically from C#?
简短的答案是,文本模板转换可执行文件和关联的运行时与Visual Studio一起分发,因此尽管C#代码可以手动执行转换过程,而无需打包自己的解析器和转换引擎,但实际上只能在安装了Visual Studio的PC上工作。
您能不能简单地将客户端代理生成到已安装VS的PC上的dll中,并在您没有Visual Studio的应用程序(例如VS Code或其他编辑器)中的应用程序中使用该dll?如果这是一个因素,则可以使用VS社区版生成客户端代理,而不会出现太多问题。
如果您控制API,那么最简单的解决方案是在API解决方案中创建一个新项目,在其中放置T4客户端,然后在部署过程中简单地重新生成客户端,然后其他应用即可使用客户端dll直接。
如果您不控制该API的项目,请与开发人员联系,以查看他们是否已经为您完成此操作!
可能有其他替代方法可以探索,而不是使用客户端库,或者避免在运行时重新生成。 如果您的代码在架构的某些元素方面是高度动态的,则可以考虑编写自己的通用代理,该代理使用基于字符串的参数或匿名对象和/或表达式,然后将其手动转换为特定的OData查询语法,以通过WebClient执行。在没有太多有关您的特定方案的信息的情况下,实现此目标的方法差异太大。
从不同的角度考虑您的需求,如果仅某些API元素的更改速度比您希望重新分发已生成的代理更快,那么OData v4客户端代理会尝试复制整个API。仅为遇到问题的架构元素找到非客户端代理解决方案。
您不必使用代理类与OData v4 API进行通信,T4脚本是作为解决方案加速器提供的,可让您快速地针对API进行编码,您不必强行使用它,但这很有用
也许还有第三方应用程序或dll可以与您的应用程序打包在一起以帮助您实现此目标,但是执行T4客户端代理类仅完成一半的工作,如果您在运行时执行此操作,则还需要手动编译这些生成的类,以便您可以执行它们。
在实现此问题的应用程序中,我们在其中创建服务API的同时,还生成了客户端代理dll,并将其提供给(可能通过Nuget)供可能要与该API进行交互的开发人员或客户端使用。因此,每次发布服务时,只要重新部署服务,我们都会在CI中使用脚本(通过Azure DevOps)来重新生成并发布客户端API DLL。