c# - 从 .NET-core 中的 ODataV4 元数据 XML 中提取类
问题描述
我ODataV4Metadata.xml
从 Microsoft Dynamics 365 下载了该文件。该文件包含许多EntityType
描述类的标签。作为参考,它(部分)是这样的:
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Microsoft.Dynamics.CRM" Alias="mscrm">
<EntityType Name="crmbaseentity" Abstract="true" />
<EntityType Name="accountleads" BaseType="mscrm.crmbaseentity">
<Key>
<PropertyRef Name="accountleadid" />
</Key>
<Property Name="accountleadid" Type="Edm.Guid" />
<Property Name="overriddencreatedon" Type="Edm.DateTimeOffset" />
<Property Name="timezoneruleversionnumber" Type="Edm.Int32" />
<Property Name="importsequencenumber" Type="Edm.Int32" />
...etc
例如,这应该生成一个名为 的类Accountleads
,其属性如下
[DataMember(Name = "overriddencreatedon")]
public System.DateTimeOffset? Overriddencreatedon
{
get
{
return this._Overriddencreatedon;
}
set
{
this._Overriddencreatedon = value;
}
}
当我在 .NET-core 中工作时,这似乎是不可能的。我能够生成一个EntityTypes
包含大量注释的巨大(100k 行代码)文件。但是,似乎我无法在 .NET-core 中执行此操作,尽管我能够使用生成的类。第二个问题是,它只生成一个文件,其中包含所有类(并且它不使用using
关键字预先包含所有命名空间)
是否有任何工具具有更大的灵活性,可以在 .NET-core 中工作并在单独的文件中生成类?谷歌搜索它在 ASP.NET 和 .NET v4 中提供了许多解决方案。
如有必要,我将制作一个开源工具来执行此操作,但也许我没有看足够多的地方。
我检查的来源:
解决方案
用于创建早期绑定代理类的开箱即用工具是CrmSvcUtil。
Daryl LaBar为XrmToolbox编写了Early Bound Generator,我相信它利用了 CrmSvcUtil。
D365 有一个名为XrmToolkit的商业 VS 附加组件,其中包括创建代理类的能力(使用专有算法,因此它们与 CrmSvcUtil 生成的类不同)。这是我使用的工具,它确实将每个类创建为一个单独的文件。
附带说明一下,Jason Lattimer 的D365 Developer Extensions有很多有用的功能,但我不相信它有内置的代理类生成。
推荐阅读
- java - 在 Kafka Consumer API 中实现 Deserializer 和 Serde 有什么区别?
- qt - Qt可以用信号唤醒休眠线程吗
- mysql - 获取表 A 中 X 玩家按表 B 的字段分组的每种奖金类型的最后一条记录
- javascript - 使用 react-router-dom 刷新后如何让用户保持在同一页面上
- git - 将 git 信息传递给下游构建
- python - p4python 与使用子进程调用 p4,哪种方式性能更好?
- c# - 如何在 listview WPF 中显示进程?
- linux - 在 bash 脚本中无法使用“source ~/.profile”
- javascript - 如何从动态填充的依赖下拉列表中选择选项时重定向到 URL?
- r - 在同一数据框中聚合具有不同 ID 的 sum obs