【问题标题】:Is there an efficient way to handle repeating XML comments C# code in Visual Studio是否有一种有效的方法来处理 Visual Studio 中重复的 XML 注释 C# 代码
【发布时间】:2021-11-01 15:50:07
【问题描述】:

我使用 Visual Studio 已经有几年了,我们一直只是手动为我们的 C# 代码编写所有 XML cmets。

但最近我认识到需要一种方法来集中维护某些 XML cmets,因为它们在我们的代码中重复多次。

例如,我们将有几个方法接受相同的参数,因为它们按顺序相互调用,传递变量。

或者我们将在多个完全不同的位置使用相同的参数(例如版本处理的搜索日期)。

/// <summary>
/// Get data by searchdate
/// </summary>
/// <param name="searchdate">The date to use while fetching the data</param>
public void MethodX(DateTime searchDate)
    // fetch something from somewhere by date
    var y = MethodY(searchDate);
}

/// <summary>
/// Get some more data by searchdate
/// </summary>
/// <param name="searchdate">The date to use while fetching the data</param>
public void MethodY(DateTime searchDate)
    // fetch something more from somewhere else by date
}

我们不能将它们存储在资源文件中,因为您不能在 XML 标记中使用代码(至少我认为我不能)。

有没有一种有效的方法来存储和维护我们的 XML cmets 中的这些重复部分?

【问题讨论】:

  • 如果您使用snippet 来存储这些重复信息会怎样?
  • 这仅适用于一个开发人员,而不是整个团队(或者当有人添加新 ont 时,您需要不断地从开发人员那里导入 sn-ps),并且如果您想在使用后更改它们他们在几个地方,你需要更改所有的 sn-ps 并为那些已经使用过的做搜索替换

标签: c# visual-studio xml-comments


【解决方案1】:

如果您只想在一个地方添加 XML 注释并在其他地方重复使用,您可以使用 <inheritdoc> XML 文档标签。此标签受到 VS Intellisense 以及可以从您的 cmets 生成文档的工具的尊重,例如 VSdocman(我是它的作者)。

您的代码可能如下所示:

/// <summary>
/// Get data by searchdate
/// </summary>
/// <param name="searchDate">The date to use while fetching the data</param>
public void MethodX(DateTime searchDate)
{
    // fetch something from somewhere by date
    MethodY(searchDate);
}

/// <summary>
/// Get some more data by searchdate
/// </summary>
/// <param name="searchDate"><inheritdoc cref="MethodX"/></param>
public void MethodY(DateTime searchDate)
{
    // fetch something more from somewhere else by date
}

MethodY 中不带 param 标记的 inheritdoc 的替代版本:

/// <summary>
/// Get some more data by searchdate
/// </summary>
/// <inheritdoc cref="MethodX" select="/param[name='searchDate']"/>
public void MethodY(DateTime searchDate)

如果您想将您的 XML cmets 存储在一个中心位置,您可以将它们保存在一个外部 XML 文件中,并使用<include> XML doc 标签链接到它们。

类似的东西(未测试):

/// <summary>
/// Get some more data by searchdate
/// </summary>
/// <include file="myXmlComments.xml" path="[@name='MyClass.MethodX']/param[name='searchDate']"/>
public void MethodY(DateTime searchDate)

【讨论】:

  • 感谢您的详细回答,尤其是第一个选项似乎可用,但我确实预见到了问题,例如在完全不同的命名空间中使用 MethodZ 时,我不能将 MethodX 的命名空间称为我会得到一个循环引用。最集中的选项是使用 XML 文件作为评论存储,但这并不是真正的用户友好。如果这些都是可能性,那我就不是一个很快乐的开发者了
  • 我不知道任何其他方式。 XML cmets 和循环引用的问题与循环引用的其他常见问题没有什么不同。例如,您想使用 MethodZ 中的 MethodX(如果您想使用 X in Z 中的注释,为什么不这样做)。有一些方法可以解决它,例如,使用 MethodX 创建一个单独的程序集,请参阅stackoverflow.com/a/42288056/217666。对于 XML cmets 而言,这并不是什么新鲜事,也没有什么特别之处。
  • 我当然明白这一点,但我真正想要的是类似于 XML cmets 中参数描述的资源文件。我认为这将非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2021-04-25
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多