创建代码生成工具扩展
发布日期: 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。 保留所有权利。 版权