我已按照MSDN上的步骤和其他SO问题来设置文档,并在帮助页面的说明部分显示XML注释。但是,当我尝试构建或运行项目时,我收到错误。 Visual Studio 2017不再具有" Build"选择属性。它已被" Compile"取代。部分。虽然本节确实有"生成XML文档文件"选项,它没有XML文档文件位置选项(如在MSDN方向中)。话虽这么说,我们知道XmlDocumentProvider正在寻找"〜/ App_Data / XmlDocument.xml"在HelpPageConfig.vb文件中。
首先,当我运行项目时,它返回一个" No Document Provided"错误,因为,那里没有文件。当我创建XML文档" XMLDocument.xml"在App_Data文件夹中,错误返回说"未找到根元素。"添加根元素后,不会返回错误;但是,帮助页面中也没有显示任何描述。
设定:
我试过了:
有没有人知道root元素应该是什么,或者是否有办法让VS 2017自动生成文件(如果它不存在)?
答案 0 :(得分:2)
我知道这个答案来得很晚,但是我遇到了同样的问题。我无法使Visual Studio 2017将XML文档文件输出到建议的~/App_Data/XmlDocument.xml
位置。
但是,我发现在~/bin/<project name>.xml
下生成了正确的文件。因此,如果您的项目是“ TestWebAPI2”,则此文件应为~/bin/TestWebAPI2.xml
。
(我看不出是否有办法将该文件复制/复制到~/App_Data
,但是我已经花了很长时间了)
要使其正常工作,请转至〜/ Areas / HelpPage / App_Start / HelpPageConfig.vb并更改以下代码行以使其适合:
config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))
成为
config.SetDocumentationProvider(New XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/bin/<yourprojectname>.xml")))
(不要忘记将<yourprojectname>
替换为您的WebAPI2项目名称)
答案 1 :(得分:0)
您可以通过以下方式正确执行此操作
1)如果没有App_Data文件夹,请通过右键单击将其添加 解决方案资源管理器中的项目,然后添加|添加Asp.Net文件夹| App_Data
2)转到“项目属性”的“生成”部分。在输出下,检查 XML文档文件。在编辑框中,键入 “ App_Data / XmlDocument.xml”
可以在此link
中找到说明。
答案 2 :(得分:0)
API帮助未显示主体参数描述。 在类属性中缺少描述信息。 只需将DescriptionAttribute添加到属性:
[Description("Simple description")]
public string Text { get; set; }
这是我的解决方法:
public string GetDocumentation(MemberInfo member)
{
string memberName = String.Format(CultureInfo.InvariantCulture, "{0}.{1}", GetTypeName(member.DeclaringType), member.Name);
string expression = member.MemberType == MemberTypes.Field ? FieldExpression : PropertyExpression;
string selectExpression = String.Format(CultureInfo.InvariantCulture, expression, memberName);
XPathNavigator propertyNode = _documentNavigator.SelectSingleNode(selectExpression);
var result = GetTagValue(propertyNode, "summary") ?? GetDescription(member);
return result;
}
private static string GetDescription(MemberInfo memberInf)
{
var result = (memberInf.GetCustomAttribute(typeof(DescriptionAttribute)) as DescriptionAttribute)?.Description;
return result;
}