zoukankan      html  css  js  c++  java
  • summary

    1.调用
     static void Main(string[] args)
            {
    
        
              Transform.ExtractInterfaceMthod("Holworth.Engine.IUser1", "IUser1EngineController", "valuationCal");
                Transform.ExtractInterfaceMthod2("ValuationLib", "ValuationCal"); //ExtractInterfaceMthod2CallExsample  ValuationCal
                Console.Read();
                return;
            }     
    2.代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace ConsoleApplication1
    {
        public class Transform
        {
    
            /// <summary>
            /// 根据接口生成方法
            /// </summary>
            /// <param name="moduleName">接口的程序集名称</param>
            /// <param name="interfaceName">接口名</param>
            /// <param name="caseName">实例的名称</param>
            public static void ExtractInterfaceMthod(string moduleName,string interfaceName,string caseName)
            {
                var types = Assembly.Load(moduleName).GetTypes();
                StringBuilder sb = new StringBuilder();
                string str = "";
                string calfunc = "";
                Dictionary<string, ClassSummary> classSummaryDictionary = new Dictionary<string, ClassSummary>();
                XmlDocument xmlDoc = new XmlDocument();
                string configPath = AppDomain.CurrentDomain.BaseDirectory + $@"{moduleName}.xml";
                xmlDoc.Load(configPath);
                XmlNode doc = xmlDoc.SelectSingleNode("doc");
                XmlNode members = doc.SelectSingleNode("members");
                XmlNodeList memberList = members.SelectNodes("member");
                foreach (XmlNode member in memberList)
                {
                    string summary = member.InnerXml;
                    string oriContent = member.SelectSingleNode("summary").InnerText.Replace("
    ", "").Replace("
    ", "").Replace(" ", "");
    
                    string fullName = member.Attributes.GetNamedItem("name").InnerText.ToString();
    
                    string left = fullName.Split('(')[0];
                    string className = left.Split('.')[left.Split('.').Length - 2];
    
                    string methodName = left.Split('.')[left.Split('.').Length - 1];
                    if (!classSummaryDictionary.ContainsKey(className))
                    {
                        classSummaryDictionary[className] = new ClassSummary();
                    }
                    ClassSummary cs = classSummaryDictionary[className];
    
                    string[] m2arr = fullName.Split(new string[] { methodName }, StringSplitOptions.None);
                    methodName = methodName + m2arr[1];
    
                    methodName = methodName.Replace("System.", "").Replace("@", "");
                    if (!cs.MethodSummaryDictionary.ContainsKey(methodName))
                    {
    
                        //GetCouponBondValue(Double[], Double[], Int32, Double, String, Double, DateTime, DateTime, DateTime, Int32, Int32, Boolean, Double)
                        cs.MethodSummaryDictionary[methodName] = new MethodSummary();
                    }
                    MethodSummary methodSummary = cs.MethodSummaryDictionary[methodName];
                    methodSummary.MethodZhushi = oriContent;
                    XmlNodeList paramNodeList = member.SelectNodes("param");
                    foreach (XmlNode paramNode in paramNodeList)
                    {
                        string parameterName = paramNode.Attributes.GetNamedItem("name").InnerText;
                        string paramSummary = paramNode.InnerText;
                        methodSummary.ParameterSummaryDictonary[parameterName] = paramSummary;
    
                    }
    
                }
    
                foreach (var item in types)
                {
                    if (item.Name == interfaceName)
                    {
                        var methods = item.GetMethods().ToList();
    
                        foreach (MethodInfo m in methods)
                        {
                            var returntype = m.ReturnType.Name;
                            string methodName = m.Name;
                            if (string.Compare(returntype, "void", true) == 0)
                            {
                                returntype = "void";
                            }
                            str = $"public {returntype} {methodName} ( ";
                            calfunc = $" {methodName} ( ";
    
    
                            char[] def = m.GetBaseDefinition().ToString().Trim().ToCharArray();
                            bool start = false;
                            bool first = true;
                            foreach (var c in def)
                            {
                                if (c == ' ' && first)
                                {
                                    start = true;
                                    methodName = "";
                                    first = false;
                                    continue;
                                }
                                if (start)
                                {
                                    methodName += c.ToString();
                                }
    
                            }
    
    
    
                            methodName = methodName.Replace("System.", "").Replace(" ByRef", "");
                            methodName = methodName.Replace(" ", "");
                            string summary = "";
    
                            try
                            {
                                summary = "/// <summary>
    " + "/// " + classSummaryDictionary[item.Name].MethodSummaryDictionary[methodName].MethodZhushi + "
    " + "///</summary>";
    
                                foreach (var p in classSummaryDictionary[item.Name].MethodSummaryDictionary[methodName].ParameterSummaryDictonary)
                                {
    
                                    summary += "
    /// <param name=" + """ + p.Key + """ + ">" + p.Value + " </param>";
    
                                }
                            }
                            catch (Exception ex)
                            {
    
                                summary = "/// <summary>
    " + "/// " + $"Badly formed XML comment ignored for member "M: ValuationLib.ValuationCal.GetCouponBondValue(System.Double[], System.Double[], System.Int32, System.Double, System.String, System.Double, System.DateTime, System.DateTime, System.DateTime, System.Int32, System.Int32, System.Boolean, System.Double)" + "
    " + "///</summary>"; ;
                            }
    
                            var parameters = m.GetParameters().ToList();
                            foreach (ParameterInfo parameter in parameters)
                            {
                                string pn = parameter.Name;
                                string ptype = parameter.ParameterType.ToString();
                                bool isout = false;
                                string direction = "";
                                if (parameter.ParameterType.IsByRef)
                                {
                                    direction = "ref ";
                                }
                                if (parameter.IsOut)
                                {
                                    direction = "out ";
                                }
                                if (ptype.EndsWith("&"))
                                {
                                    isout = true;
                                    ptype = $"{direction} {ptype.TrimEnd('&')}";
                                }
                                str += ptype + " " + pn + ",";
                                if (isout)
                                {
                                    pn = $"{direction} " + pn;
                                }
                                calfunc += pn + ",";
                            }
                            str = str.TrimEnd(',');
                            string isreturn = returntype != "void" ? "return" : "";
                            calfunc = $"{isreturn} {caseName}." + calfunc.TrimEnd(',') + ");";
    
                            str += ")
    {
    " + calfunc + "
    }";
    
                            //sb.Append("
    " + str);
                            sb.Append("
    " + summary + "
    " + str + "
    
    
    ");
                        }
    
    
                    }
    
                }
                var str1 = sb.ToString();
                Console.WriteLine(str1);
                Console.Read();
            }
    
            /// <summary>
            /// 生成某个类的接口方法及注释
            /// </summary>
            /// <param name="moduleName2">模块名称</param>
            /// <param name="className2">类名</param>
            public static void ExtractInterfaceMthod2(string moduleName2,string className2)
            {
    
                var types = Assembly.Load(moduleName2).GetTypes();
                StringBuilder sb = new StringBuilder();
                string str = "";
                string calfunc = "";
                Dictionary<string, ClassSummary> classSummaryDictionary = new Dictionary<string, ClassSummary>();
                XmlDocument xmlDoc = new XmlDocument();
                string configPath = AppDomain.CurrentDomain.BaseDirectory + $@"{moduleName2}.xml";
                xmlDoc.Load(configPath);
                XmlNode doc = xmlDoc.SelectSingleNode("doc");
                XmlNode members = doc.SelectSingleNode("members");
                XmlNodeList memberList = members.SelectNodes("member");
                foreach (XmlNode member in memberList)
                {
                    string summary = member.InnerXml;
                    string oriContent = member.SelectSingleNode("summary").InnerText.Replace("
    ", "").Replace("
    ", "").Replace(" ", "");
    
                    string fullName = member.Attributes.GetNamedItem("name").InnerText.ToString();
                    
                    string left = fullName.Split('(')[0];
                    string className = left.Split('.')[left.Split('.').Length - 2];
    
                    string methodName = left.Split('.')[left.Split('.').Length - 1];
                    if (!classSummaryDictionary.ContainsKey(className))
                    {
                        classSummaryDictionary[className] = new ClassSummary();
                    }
                    ClassSummary cs = classSummaryDictionary[className];
    
                    string[] m2arr = fullName.Split(new string[] { methodName }, StringSplitOptions.None);
                    methodName = methodName + m2arr[1];
                 
                    methodName = methodName.Replace("System.", "").Replace("@", "");
                    if (!cs.MethodSummaryDictionary.ContainsKey(methodName))
                    {
                       
                        //GetCouponBondValue(Double[], Double[], Int32, Double, String, Double, DateTime, DateTime, DateTime, Int32, Int32, Boolean, Double)
                        cs.MethodSummaryDictionary[methodName] = new MethodSummary();
                    }
                    MethodSummary methodSummary = cs.MethodSummaryDictionary[methodName];
                    methodSummary.MethodZhushi = oriContent;
                    XmlNodeList paramNodeList = member.SelectNodes("param");
                    foreach (XmlNode paramNode in paramNodeList)
                    {
                        string parameterName = paramNode.Attributes.GetNamedItem("name").InnerText;
                        string paramSummary = paramNode.InnerText;
                        methodSummary.ParameterSummaryDictonary[parameterName] = paramSummary;
    
                    }
    
                }
                foreach (var item in types)
                {
    
                    if (item.Name ==className2)
                    { 
                        //载入xml文件名
                        var methods = item.GetMethods().ToList();
    
                        foreach (MethodInfo m in methods)
                        {
                            var returntype = m.ReturnType.Name;
                            string methodName = m.Name;
                            if (methodName == "ToString" || methodName == "GetHashCode" || methodName == "Equals" || methodName == "GetType")
                            {
                                continue;
                            }
                            if (string.Compare(returntype, "void", true) == 0)
                            {
                                returntype = "void";
                            }
                            str = $" {returntype} {methodName} ( ";
                            calfunc = $" {methodName} ( ";
                         
                            var parameters = m.GetParameters().ToList();
                            foreach (ParameterInfo parameter in parameters)
                            {
    
                                string pn = parameter.Name;
                                string ptype = parameter.ParameterType.ToString();
                                
                                bool isout = false;
                                string direction = "";
                                if (parameter.ParameterType.IsByRef)
                                {
                                    direction = "ref";
                                }
                                if (parameter.IsOut)
                                {
                                    direction = "out";
                                }
                                if (ptype.EndsWith("&"))
                                {
                                    isout = true;
                                 
                                    ptype = $"{direction} {ptype.TrimEnd('&')}";
                                }
                                str += ptype + " " + pn + ",";
                                if (isout)
                                {
                                    pn = $"{direction} " + pn;
                                }
                                calfunc += pn + ",";
                            }
                            str = str.TrimEnd(',');
                            string isreturn = returntype != "void" ? "return" : "";
                            calfunc = calfunc.TrimEnd(',') + ");";
    
                            str += ");";
    
                            char[] def = m.GetBaseDefinition().ToString().Trim().ToCharArray();
                            bool start = false;
                            bool first = true;
                            foreach (var c in def)
                            {
                                if(c==' '&&first)
                                {
                                    start = true;
                                    methodName = "";
                                    first = false;
                                    continue;
                                }
                                if (start)
                                {
                                    methodName += c.ToString();
                                }
    
                            }
    
                       
    
                            methodName = methodName.Replace("System.", "").Replace(" ByRef","");
                            methodName = methodName.Replace(" ", "");
                            string summary = "";
    
                            try
                            {
                                summary = "/// <summary>
    " + "/// " + classSummaryDictionary[item.Name].MethodSummaryDictionary[methodName].MethodZhushi + "
    " + "///</summary>";
    
                                foreach (var p in classSummaryDictionary[item.Name].MethodSummaryDictionary[methodName].ParameterSummaryDictonary)
                                {
    
                                    summary += "
    /// <param name=" + """ + p.Key + """ + ">" + p.Value + " </param>";
    
                                }
                            }
                            catch (Exception ex)
                            {
    
                                summary = "/// <summary>
    " + "/// " + $"Badly formed XML comment ignored for member "M: ValuationLib.ValuationCal.GetCouponBondValue(System.Double[], System.Double[], System.Int32, System.Double, System.String, System.Double, System.DateTime, System.DateTime, System.DateTime, System.Int32, System.Int32, System.Boolean, System.Double)" + "
    " + "///</summary>"; ;
                            }
                         
    
    
                            sb.Append("
    " + summary + "
    " + str+"
    
    
    ");
    
                        }
    
    
                    }
    
                }
                var str1 = sb.ToString();
                Console.WriteLine(str1);
                Console.Read();
            }
        }
    
    
        /// <summary>
        /// 方法注释
        /// </summary>
        public class MethodSummary
        {
            /// <summary>
            /// 方法注释构造函数
            /// </summary>
            public MethodSummary()
            {
                ParameterSummaryDictonary = new Dictionary<string, string>();
            }
            /// <summary>
            /// 方法名称
            /// </summary>
            public string MethodName { get; set; }
            /// <summary>
            /// 方法注释
            /// </summary>
            public string MethodZhushi { get; set; }
    
            /// <summary>
            /// 1个方法对应N个参数的注释
            /// </summary>
            public Dictionary<string, string> ParameterSummaryDictonary { get; set; }
        }
        /// <summary>
        /// 类注释辅助类
        /// </summary>
        public class ClassSummary
        {
            /// <summary>
            /// 类注释的构造函数
            /// </summary>
            public ClassSummary()
            {
                MethodSummaryDictionary = new Dictionary<string, MethodSummary>();
    
            }
            /// <summary>
            /// 类名
            /// </summary>
            public string ClassName { get; set; }
            /// <summary>
            /// 每个类有N个方法 key:方法名 value:方法注释
            /// </summary>
            public Dictionary<string, MethodSummary> MethodSummaryDictionary { get; set; }
    
        }
    }
  • 相关阅读:
    HDU ACM 1392 Surround the Trees-&gt;凸包
    JMeter使用记录1 -- JDBC測试
    Html学习笔记4
    c++使用mysql的api连接相关问题
    [Angularjs]ng-select和ng-options
    mysql之字符串操作
    mysql之日期函数
    [sharepoint]Rest api相关知识(转)
    [工具类]泛型集合转换为DataTable
    C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  • 原文地址:https://www.cnblogs.com/kexb/p/9415676.html
Copyright © 2011-2022 走看看