roslyn试图构建一个param属性

本文关键字:一个 param 属性 构建 roslyn | 更新日期: 2023-09-27 18:22:48

我不知道应该使用什么类型。

我正在尝试根据提供的参数语法为文档构建一个<param name="testing"></param>元素。

我使用了错误的类型,因为我无法编译。

错误CS0029无法将类型"Microsoft.CodeAnalysis.CSharp.Syntax.XmlTextAttributeSyntax"隐式转换为"Microsoft.CodeAnalysis.CSharp.Syntax.XmlNodeSyntax"`

/// <summary>
/// Create a parameter element for the supplied parameter syntax.
/// </summary>
/// <param name="parameterSyntax">the parameter syntax.</param>
/// <returns>the corresponding parameter XML entry.</returns>
private XmlElementSyntax CreateParameter(ParameterSyntax parameterSyntax)
{
    var identifier = SyntaxFactory.Identifier(parameterSyntax.Identifier.Text);
    var text = SyntaxFactory.XmlTextAttribute(
        SyntaxFactory.XmlName("name"),
        SyntaxFactory.Token(SyntaxKind.EqualsToken),
        SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken),
        SyntaxFactory.TokenList(identifier),
        SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken));
    // THE PROBLEM IS HERE
    var list = SyntaxFactory.List<XmlNodeSyntax>(new XmlNodeSyntax[] { text });
    return SyntaxFactory.XmlElement(
        SyntaxFactory.XmlElementStartTag(SyntaxFactory.XmlName("param")),
        list,
        SyntaxFactory.XmlElementEndTag(SyntaxFactory.XmlName("param")));
}

roslyn试图构建一个param属性

您的xml属性应该是XmlElementStartTag的一部分,而不是元素内容的一部分。试试这样的东西:

private XmlElementSyntax CreateParameter(ParameterSyntax parameterSyntax)
{
  var identifier = SyntaxFactory.Identifier(parameterSyntax.Identifier.Text);
  var attribute = SyntaxFactory.XmlNameAttribute(
      SyntaxFactory.XmlName("name"),
      SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken),
      SyntaxFactory.IdentifierName(identifier),
      SyntaxFactory.Token(SyntaxKind.DoubleQuoteToken));
  var startTag = SyntaxFactory.XmlElementStartTag(SyntaxFactory.XmlName("param"))
    .WithAttributes(new SyntaxList<XmlAttributeSyntax>().Add(attribute));
  var endTag = SyntaxFactory.XmlElementEndTag(SyntaxFactory.XmlName("param"));
  return SyntaxFactory.XmlElement(startTag, new SyntaxList<XmlNodeSyntax>(), endTag)
                      .NormalizeWhitespace();
}