创建代码生成工具扩展

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

通过指定其他命令行参数和参数值,可以扩展代码生成工具的功能。 若要指定参数,请向命令行中添加以下内容:/<参数名称>:<类名称>,<程序集名称>。 请注意,程序集名称不包括 .dll 扩展名。 作为替代方式,也可以采用“<add key=”<参数名称>” value=”<类名称>,<程序集名称>” />”的格式向配置文件中添加等效值。

下表列出可以使用的参数。

参数名称

接口名称

说明

/codecustomization

ICustomizeCodeDomService

在 CodeDOM 生成完成后调用,假定为 ICodeGenerationService 的默认实例。 这对生成其他类(如选择列表中的常量)很有用。

/codewriterfilter

ICodeWriterFilterService

在 CodeDOM 生成过程中调用(假定为 ICodeGenerationService 的默认实例),以确定是否应生成特定对象或属性。

/codewritermessagefilter

ICodeWriterMessageFilterService

在 CodeDOM 生成过程中调用(假定为 ICodeGenerationService 的默认实例),以确定是否应生成特定消息。 由于 Microsoft.Crm.Sdk.Proxy.dll 和 Microsoft.Xrm.Sdk.dll 中已生成消息,因此不应将其用于请求/响应。

/metadataproviderservice

IMetadataProviderService

调用以从服务器中检索元数据。 在生成过程中可能多次调用此参数,所以应缓存数据。

/codegenerationservice

ICodeGenerationService

CodeDOM 生成的核心实现。 如果发生更改,其他扩展可能无法按所述方式工作。

/namingservice

INamingService

在 CodeDOM 生成过程中调用,以确定对象的名称(假定为默认实现)。

这些接口的实现必须包含以下构造函数之一:

MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)

Microsoft.Crm.Services.Utility 命名空间是在 CrmSvcUtil.exe 中定义的。 在 Microsoft Visual Studio 代码生成工具扩展项目中添加对 CrmSvcUtil.exe 的引用。

生成选项集枚举的示例扩展

下面的示例代码演示如何编写扩展。


using System;

using Microsoft.Crm.Services.Utility;
using Microsoft.Xrm.Sdk.Metadata;

/// <summary>
/// Sample extension for the CrmSvcUtil.exe tool that generates early-bound
/// classes for custom entities.
/// </summary>
public sealed class BasicFilteringService : ICodeWriterFilterService
{
    public BasicFilteringService(ICodeWriterFilterService defaultService)
    {
        this.DefaultService = defaultService;
    }

    private ICodeWriterFilterService DefaultService { get; set; }

    bool ICodeWriterFilterService.GenerateAttribute(AttributeMetadata attributeMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateAttribute(attributeMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateEntity(EntityMetadata entityMetadata, IServiceProvider services)
    {
        if (!entityMetadata.IsCustomEntity.GetValueOrDefault()) { return false; }
        return this.DefaultService.GenerateEntity(entityMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateOption(OptionMetadata optionMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateOption(optionMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateOptionSet(optionSetMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata,
    IServiceProvider services)
    {
        return this.DefaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateServiceContext(IServiceProvider services)
    {
        return this.DefaultService.GenerateServiceContext(services);
    }
}

可以在 SDK 的 SampleCode\CS\CrmSvcUtilExtensions 中找到此示例代码和 GeneratePicklistEnums 示例扩展。下载 Microsoft Dynamics CRM SDK 包。GeneratePicklistEnums 示例扩展输出包含所有选项集和状态代码的枚举的源代码文件。 有关如何使用这些枚举的示例,请参阅 SampleCode\CS\QuickStart 示例。

另请参阅

使用代码生成工具 (CrmSvcUtil.exe) 创建早期绑定实体类
使用早期绑定的实体类进行创建、更新和删除
疑难解答提示
使用 Microsoft Dynamics 365 Web 服务运行简单程序

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权