首页 > 解决方案 > 从 .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 中提供了许多解决方案。

如有必要,我将制作一个开源工具来执行此操作,但也许我没有看足够多的地方。


我检查的来源:

标签: c#.net-coreodatadynamics-crm

解决方案


用于创建早期绑定代理类的开箱即用工具是CrmSvcUtil

Daryl LaBar为XrmToolbox编写了Early Bound Generator,我相信它利用了 CrmSvcUtil。

D365 有一个名为XrmToolkit的商业 VS 附加组件,其中包括创建代理类的能力(使用专有算法,因此它们与 CrmSvcUtil 生成的类不同)。这是我使用的工具,它确实将每个类创建为一个单独的文件。

附带说明一下,Jason Lattimer 的D365 Developer Extensions有很多有用的功能,但我不相信它有内置的代理类生成。


推荐阅读