如何使CRMSvcUtil.exe生成无重复,无错误的早期绑定选项集?

Pet*_*eed 9 enums dynamics-crm dynamics-crm-2011

我使用Erik Pool的实现ICodeWriterFilterService和Manny Grewal的GenerateOption函数作为模型来过滤掉CRMSvcUtil生成的文件中不需要的实体.虽然Erik建议返回trueGenerateOptionSet方法enums集生成的方法,但这样做会复制任何特定实体使用的任何全局选项集(如该帖子的其中一条评论中所述).

为了解决这个问题,我检查是否已经生成了选项集,如果是,我将返回默认选项(大概false是大多数情况下),如下所示.

//list of generated option sets, instantiated in the constructor
private List<string> GeneratedOptionSets;

public bool GenerateOptionSet
    (OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
{
    if (!GeneratedOptionSets.Contains(optionSetMetadata.Name))
    {
        GeneratedOptionSets.Add(optionSetMetadata.Name);
        return true;
    }

    return _defaultService.GenerateOptionSet(optionSetMetadata, services);
}
Run Code Online (Sandbox Code Playgroud)

但是当在我的CRM项目中合并生成的文件时,编译错误

Cannot convert type 'Microsoft.Xrm.Sdk.OptionSetValue' to 'int'
Run Code Online (Sandbox Code Playgroud)

总是被看起来像的每一行代码抛出

this.SetAttributeValue
    ("address1_shippingmethodcode", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value))));
Run Code Online (Sandbox Code Playgroud)

.

作为一种变通方法,我用一个单独的项目中,我过滤我需要的实体运行CRMSvcUtil的论据埃里克表明,更换代码的麻烦的部分(int)(value)(这里value是一个OptionSetValue含)value.Value时生成的文件后,再重新保存文件,并所有问题都消失了.

我的问题是:我是否需要做一些不同的事情来修复这个编译错误与默认CRMSvcUtil生成的文件,而不做像修改生成的文件这样的hackish?

Pet*_*eed 3

我敢打赌 Guarav 的答案是真正的方法,但在缺乏相关文档的情况下CRMSvcUtil,我被迫使用我的解决方法。(我使用一个单独的项目,在其中过滤我需要的实体,CRMSvcUtil使用 Erik 建议的参数运行,在生成文件后将代码中麻烦的部分(int)(value)(其中valueOptionSetValue)替换为value.Value,然后重新保存文件。)

这不是一个完美的解决方案,但它一直在研究我迄今为止使用过的几个样本。