.NET7中如何获取C#属性的Summary注释信息?
在.NET7中获取C#属性的Summary注释方法
要获取C#类属性的Summary注释,核心思路是利用项目生成的XML文档文件,结合反射定位属性对应的注释节点,具体实现步骤如下:
1. 启用XML文档生成
首先需要配置项目,让编译时生成包含注释信息的XML文件:
- 右键项目 → 属性 → 生成选项卡
- 勾选“XML文档文件”,可保留默认路径
$(OutputPath)$(AssemblyName).xml,确保XML文件最终和程序集输出在同一目录
2. 实现注释读取工具类
编写一个静态工具类,通过反射获取类型信息,再读取XML文档中对应的属性注释:
using System.Reflection; using System.Xml.Linq; public static class XmlDocHelper { public static string GetPropertySummary(Type targetType, string propertyName) { // 获取目标类型所在程序集的XML文档路径 var assembly = targetType.Assembly; var xmlFilePath = Path.ChangeExtension(assembly.Location, ".xml"); if (!File.Exists(xmlFilePath)) return string.Empty; // 加载XML文档并获取命名空间 var doc = XDocument.Load(xmlFilePath); var xmlNs = doc.Root?.Name.Namespace; if (xmlNs == null) return string.Empty; // 构造属性的完整标识(XML中属性节点的name格式为P:类型全名.属性名) var propertyFullId = $"P:{targetType.FullName}.{propertyName}"; // 匹配属性的注释节点(兼容自动属性的get/set子节点) var propertyNode = doc.Descendants(xmlNs + "member") .FirstOrDefault(m => { var nodeName = m.Attribute("name")?.Value; return nodeName == propertyFullId || nodeName?.StartsWith($"{propertyFullId}.get_") == true || nodeName?.StartsWith($"{propertyFullId}.set_") == true; }); // 提取并清理summary内容 return propertyNode?.Descendants(xmlNs + "summary") .FirstOrDefault()?.Value.Trim() ?? string.Empty; } }
3. 使用示例
针对你提供的CDto类,调用工具类即可获取Name属性的注释:
var nameSummary = XmlDocHelper.GetPropertySummary(typeof(CDto), nameof(CDto.Name)); Console.WriteLine(nameSummary); // 输出:名称
注意事项
- 确保XML文档文件与程序集文件处于同一目录,否则需要调整
xmlFilePath的获取逻辑 - 如果读取跨程序集类型的注释,需要加载对应程序集的XML文档
- 自动属性的注释在XML文件中可能会生成
get_Name和set_Name的子节点,工具类已兼容这种情况
内容的提问来源于stack exchange,提问作者ZhaiFanhua
相关产品推荐
相关产品推荐

