/// <summary> /// 获取程序集信息 /// </summary> /// <param name="assembly"></param> /// <returns></returns> private unsafe static assembly get(Assembly assembly) { if (assembly != null) { assembly value; if (assemblyLock.TryGetValue(assembly, out value)) { return(value); } try { string fileName = assembly.Location; if (fileName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) { if (File.Exists(fileName = fileName.Substring(0, fileName.Length - 3) + "xml")) { xmlNode xmlNode = fastCSharp.emit.xmlParser.Parse <xmlNode>(File.ReadAllText(fileName, Encoding.UTF8), xmlParserConfig)["members"]; if (xmlNode.Type == emit.xmlNode.type.Node) { fixed(char *nameFixed = "name") { value = new assembly(); xmlParser.attributeIndex attribute = default(xmlParser.attributeIndex); foreach (keyValue <subString, xmlNode> node in xmlNode.Nodes) { if (node.Value.Type == emit.xmlNode.type.Node && node.Key.Equals("member")) { if (node.Value.GetAttribute(nameFixed, 4, ref attribute) && attribute.Length > 2) { value.LoadMember(subString.Unsafe(node.Key.value, attribute.StartIndex, attribute.Length), node.Value); } } } } } else { log.Error.Real("XML文档解析失败 " + fileName, new System.Diagnostics.StackFrame(), false); } } else { log.Default.Real("没有找到XML文档注释 " + fileName, new System.Diagnostics.StackFrame(), false); } } assemblyLock.Set(assembly, value); } finally { assemblyLock.Exit(); } return(value); } return(null); }
static public assembly Read(string path) { assembly ag = new assembly(); if (File.Exists(path) == false) { return(ag); } string[] text = File.ReadAllLines(path); foreach (string b in text) { if (b.StartsWith("[") == false) { continue; } string[] ac = b.Split(":".ToCharArray()); if (ac.Length < 2) { continue; } string cc = ac[1].Trim(); if (cc.StartsWith("Assembly") == false) { if (cc.StartsWith("Guid") == false) { continue; } } cc = cc.Replace("Assembly", "").Trim(); cc = cc.Replace("\"", "").Trim(); string[] dd = cc.Split("()\"".ToCharArray()); ag.Set(dd[0], dd[1]); } return(ag); }
/// <summary> /// 获取参数描述 /// </summary> /// <param name="method"></param> /// <param name="parameter"></param> /// <returns></returns> public static string Get(MethodInfo method, ParameterInfo parameter) { assembly assembly = get(method.DeclaringType.Assembly); return(assembly == null ? string.Empty : assembly.Get(method, parameter)); }
/// <summary> /// 获取方法返回值描述 /// </summary> /// <param name="method"></param> /// <returns></returns> public static string GetReturn(MethodInfo method) { assembly assembly = get(method.DeclaringType.Assembly); return(assembly == null ? string.Empty : assembly.GetReturn(method)); }
/// <summary> /// 获取属性描述 /// </summary> /// <param name="property"></param> /// <returns></returns> public static string Get(PropertyInfo property) { assembly assembly = get(property.DeclaringType.Assembly); return(assembly == null ? string.Empty : assembly.GetSummary(property)); }
/// <summary> /// 获取字段描述 /// </summary> /// <param name="field"></param> /// <returns></returns> public static string Get(FieldInfo field) { assembly assembly = get(field.DeclaringType.Assembly); return(assembly == null ? string.Empty : assembly.GetSummary(field)); }
/// <summary> /// 获取类型描述 /// </summary> /// <param name="type"></param> /// <returns></returns> public static string Get(Type type) { assembly assembly = get(type.Assembly); return(assembly == null ? string.Empty : assembly.GetSummary(type)); }
from type in SafeGetTypes(assembly) where typeof(IMessage).IsAssignableFrom(type)
yield return(assemblyFolderFactory(assembly, currentFolder), assembly);