Asp.net web api ASP.NET Web API帮助页为F#记录类型生成不完整的文档

Asp.net web api ASP.NET Web API帮助页为F#记录类型生成不完整的文档,asp.net-web-api,f#,visual-studio-2013,asp.net-web-api-helppages,Asp.net Web Api,F#,Visual Studio 2013,Asp.net Web Api Helppages,ASP.NET Web API帮助页项目没有为用作Web API控制器操作的参数或结果类型的F#记录类型生成完整的文档。将列出成员,但XML注释中的摘要信息不会显示在生成的文档中。我该如何解决这个问题 例子 考虑以下F#记录类型用作Web API操作方法的参数或结果类型: [] 类型ExampleRecord={ ///示例属性。 道具:int 预期产量 为此类型生成的帮助页文档应在“说明”列中包含此成员的摘要信息 Name │ Description │ Type │ A

ASP.NET Web API帮助页项目没有为用作Web API控制器操作的参数或结果类型的F#记录类型生成完整的文档。将列出成员,但XML注释中的摘要信息不会显示在生成的文档中。我该如何解决这个问题

例子 考虑以下F#记录类型用作Web API操作方法的参数或结果类型:

[]
类型ExampleRecord={
///示例属性。
道具:int
预期产量 为此类型生成的帮助页文档应在“说明”列中包含此成员的摘要信息

Name │ Description │ Type │ Additional information ══════╪═══════════════════╪═════════╪═══════════════════════ Prop │ Example property. │ integer │ None. 名称│ 描述│ 类型│ 补充资料 ══════╪═══════════════════╪═════════╪═══════════════════════ 道具│ 示例属性。│ 整数│ 没有一个 实际产量 我们实际上看到的是,摘要信息完全没有

Name │ Description │ Type │ Additional information ══════╪═════════════╪═════════╪═══════════════════════ Prop │ │ integer │ None. 名称│ 描述│ 类型│ 补充资料 ══════╪═════════════╪═════════╪═══════════════════════ 道具│ │ 整数│ 没有一个 细节 此问题与以下特定技术有关:

  • Microsoft ASP.NET Web API帮助页v5.1.1
  • Visual Studio Professional 2013(更新1);以及
  • F#3.1编译器

尽管有自己的答案,但由于我目前所得到的并不是很好的解决方案,大家都可以选择更好的解决方案。

更新:未来的读者可能需要调整下面的代码。具体来说,您可能需要将
“${namespace}${namespace}${class}”
更改为
“${namespace}${class}”
。不要说我没有警告你


问题的产生是因为与如何为F#记录类型生成XML文档相关的两个错误:

  • “当F#编译器生成文档文件时,它实际上记录了记录成员的内部字段,而不是公共属性。”-

  • 在生成的XML中

  • 除非更新Visual Studio 2013(或者可能只是F#编译器),对此的最佳修复可能是生成后清理生成的XML的操作。目前,我有一个临时修复,涉及更改为成员获取文档的方法。在
    区域/HelpPage/XmlDocumentationProvider
    中,找到具有签名的方法:

    publicstringgetdocumentation(MemberInfo成员)
    
    …并将定义替换为:

    publicstringgetdocumentation(MemberInfo成员)
    {
    字符串选择表达式;
    bool isRecord=FSharpType.isRecord(member.DeclaringType,fsharptoption.None);
    国际单项体育联合会(以色列记录)
    {
    //VS 2013.1中缺陷的解决方法:记录类型文档中的重复命名空间。
    Regex matchTypeName=newregex(@“(?(?:[\p{L}\p{Nl}]+\)*)(?[\p{L}\p{Nl}]+$”;
    string classExpression=matchTypeName.Replace(GetTypeName(member.DeclaringType),“${namespace}${namespace}${class}”);
    string memberExpression=string.Format(CultureInfo.InvariantCulture,“{0}.{1}”,classExpression,member.Name);
    selectExpression=String.Format(CultureInfo.InvariantCulture、FieldExpression、memberExpression);
    }
    其他的
    {
    字符串表达式=member.MemberType==MemberTypes.Field?FieldExpression:PropertyExpression;
    string memberName=string.Format(CultureInfo.InvariantCulture,“{0}.{1}”、GetTypeName(member.DeclaringType)、member.Name);
    selectExpression=String.Format(CultureInfo.InvariantCulture、expression、memberName);
    }
    XPathNavigator propertyNode=\u documentNavigator.SelectSingleNode(selectExpression);
    返回GetTagValue(propertyNode,“summary”);
    }
    
    这是一个非常临时的修复!如果您更新Web API帮助页面包,它将被覆盖,如果上述错误得到修复,它将破坏一切。我非常感谢您为我找到更好的解决方案