Пример #1
0
        /// <summary>
        /// 创建主方法
        /// </summary>
        /// <param name="path">dll 路径</param>
        /// <param name="outPutDir">输出proxy.cs 文件路径</param>
        /// <param name="template">模板</param>
        /// <param name="templateBody">模板主体</param>
        /// <param name="interfaceBody">接口主体</param>
        /// <returns>返回是否创建成功</returns>
        public bool Create(string path, string outPutDir, string template, string templateBody, string interfaceBody)
        {
            try
            {
                var asLoad = LoadAssembly(path);

                Type[]        types           = asLoad.GetTypes();
                string        assShortName    = AssemblyToolProxy.GetCurrentAppName(asLoad);
                StringBuilder body            = new StringBuilder();
                StringBuilder interfaceBodySb = new StringBuilder();
                body.AppendLine(string.Format("private const string serviceName=\"{0}\";", assShortName));
                body.AppendLine();

                // 加载所有继承了AppBase的类
                var useTypes = types.Where(t => RpcDistributer.isChildAppBase(t) && !t.IsAbstract).ToList();
                return(WriteFile(outPutDir, template, templateBody, interfaceBody, useTypes, body, interfaceBodySb, assShortName));
            }
            catch (ReflectionTypeLoadException rtlEx)
            {
                logger.LogError(rtlEx, $"无法加载程序集:{rtlEx.Message}");
                if (rtlEx.LoaderExceptions != null && rtlEx.LoaderExceptions.Length > 0)
                {
                    foreach (var lex in rtlEx.LoaderExceptions)
                    {
                        logger.LogError(lex, $"无法加载程序集:{lex.Message}");
                    }
                }
            }
            catch (TypeLoadException tlEx)
            {
                logger.LogError(tlEx, $"无法加载程序集: {tlEx.TypeName}");
            }
            catch (FileNotFoundException fNtEx)
            {
                logger.LogError(fNtEx, $"无法加载程序集: {fNtEx.FileName}");
            }

            return(false);
        }