// 初始化 dp2circulation_marc_autogen.cs 的 Assembly,并new DetailHost对象 // return: // -1 error // 0 没有重新初始化Assembly,而是直接用以前Cache的Assembly // 1 重新(或者首次)初始化了Assembly public int InitialAutogenAssembly( string strBiblioRecPath, out string strError) { strError = ""; int nRet = 0; #if NO // 2014/7/14 if (string.IsNullOrEmpty(strBiblioRecPath) == true) strBiblioRecPath = this.BiblioRecPath; #endif string strAutogenDataCfgFilename = ""; string strFormat = ""; if (StringUtil.HasHead(strBiblioRecPath, "format:") == true) { strFormat = strBiblioRecPath.Substring("format:".Length); strAutogenDataCfgFilename = Path.Combine(this.MainForm.DataDir, strFormat + "_cfgs/" + this.ScriptFileName); } else { // 库名部分路径 string strBiblioDbName = Global.GetDbName(strBiblioRecPath); if (string.IsNullOrEmpty(strBiblioDbName) == true) return 0; strAutogenDataCfgFilename = strBiblioDbName + "/cfgs/" + this.ScriptFileName; } bool bAssemblyReloaded = false; // 如果必要,重新准备Assembly if (m_autogenDataAssembly == null || m_strAutogenDataCfgFilename != strAutogenDataCfgFilename) { this.m_autogenDataAssembly = this.MainForm.AssemblyCache.FindObject(strAutogenDataCfgFilename); this.m_detailHostObj = null; // 如果Cache中没有现成的Assembly if (this.m_autogenDataAssembly == null) { string strCode = ""; string strRef = ""; #if NO byte[] baCfgOutputTimestamp = null; // return: // -1 error // 0 not found // 1 found nRet = this._myForm.GetCfgFileContent(strAutogenDataCfgFilename, out strCode, out baCfgOutputTimestamp, out strError); if (nRet == -1) goto ERROR1; if (nRet == 0) { IDetailHost host = null; if (this.DetailHostType != null) host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); else host = new DetailHost(); host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return 1; } string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; nRet = this._myForm.GetCfgFileContent(strCfgFilePath, out strRef, out baCfgOutputTimestamp, out strError); if (nRet == -1 /*|| nRet == 0*/) // .ref 文件可以没有 goto ERROR1; #endif if (string.IsNullOrEmpty(strFormat) == false) { nRet = GetCodeFromLocal( strAutogenDataCfgFilename, out strCode, out strRef, out strError); } else { // 从服务器获得两个配置文件的内容 nRet = GetCode( strAutogenDataCfgFilename, out strCode, out strRef, out strError); } if (nRet == -1) goto ERROR1; if (nRet == 1) return 1; try { // 准备Assembly Assembly assembly = null; nRet = GetCsScriptAssembly( strCode, strRef, out assembly, out strError); if (nRet == -1) { strError = "编译脚本文件 '" + strAutogenDataCfgFilename + "' 时出错:" + strError; goto ERROR1; } // 记忆到缓存 this.MainForm.AssemblyCache.SetObject(strAutogenDataCfgFilename, assembly); this.m_autogenDataAssembly = assembly; bAssemblyReloaded = true; } catch (Exception ex) { strError = "准备脚本代码过程中发生异常: \r\n" + ExceptionUtil.GetDebugText(ex); goto ERROR1; } } bAssemblyReloaded = true; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; // 至此,Assembly已经纯备好了 Debug.Assert(this.m_autogenDataAssembly != null, ""); } Debug.Assert(this.m_autogenDataAssembly != null, ""); // 准备 host 对象 if (this.m_detailHostObj == null || bAssemblyReloaded == true) { try { IDetailHost host = null; nRet = NewHostObject( out host, out strError); if (nRet == -1) { strError = "准备脚本文件 '" + m_strAutogenDataCfgFilename + "' 时出错:" + strError; goto ERROR1; } this.m_detailHostObj = host; } catch (Exception ex) { strError = "准备脚本代码过程中发生异常: \r\n" + ExceptionUtil.GetDebugText(ex); goto ERROR1; } } Debug.Assert(this.m_detailHostObj != null, ""); if (bAssemblyReloaded == true) return 1; return 0; ERROR1: return -1; }
// 从服务器获得两个配置文件的内容 // return: // -1 出错 // 0 正常返回 // 1 配置文件没有找到,但 host 已经初始化 int GetCode( string strAutogenDataCfgFilename, out string strCode, out string strRef, out string strError) { strError = ""; strCode = ""; strRef = ""; byte[] baCfgOutputTimestamp = null; // return: // -1 error // 0 not found // 1 found int nRet = this._myForm.GetCfgFileContent(strAutogenDataCfgFilename, out strCode, out baCfgOutputTimestamp, out strError); if (nRet == -1) return -1; if (nRet == 0) { IDetailHost host = null; if (this.DetailHostType != null) host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); else host = new DetailHost(); host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return 1; } string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; nRet = this._myForm.GetCfgFileContent(strCfgFilePath, out strRef, out baCfgOutputTimestamp, out strError); if (nRet == -1 /*|| nRet == 0*/) // .ref 文件可以没有 return -1; return 0; }
// 从本地获得两个配置文件的内容 // return: // -1 出错 // 0 正常返回 // 1 配置文件没有找到,但 host 已经初始化 int GetCodeFromLocal( string strAutogenDataCfgFilename, out string strCode, out string strRef, out string strError) { strError = ""; strCode = ""; strRef = ""; if (File.Exists(strAutogenDataCfgFilename) == false) { IDetailHost host = null; if (this.DetailHostType != null) host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); else host = new DetailHost(); host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return 1; } Encoding encoding; // 能自动识别文件内容的编码方式的读入文本文件内容模块 // parameters: // lMaxLength 装入的最大长度。如果超过,则超过的部分不装入。如果为-1,表示不限制装入长度 // return: // -1 出错 strError中有返回值 // 0 文件不存在 strError中有返回值 // 1 文件存在 // 2 读入的内容不是全部 int nRet = FileUtil.ReadTextFileContent(strAutogenDataCfgFilename, -1, out strCode, out encoding, out strError); if (nRet != 1) return -1; string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; if (File.Exists(strCfgFilePath) == true) { nRet = FileUtil.ReadTextFileContent(strCfgFilePath, -1, out strRef, out encoding, out strError); if (nRet != 1) return -1; } return 0; }
// 初始化 dp2circulation_marc_autogen.cs 的 Assembly,并new DetailHost对象 // return: // -1 error // 0 没有重新初始化Assembly,而是直接用以前Cache的Assembly // 1 重新(或者首次)初始化了Assembly public int InitialAutogenAssembly( string strBiblioRecPath, out string strError) { strError = ""; int nRet = 0; #if NO // 2014/7/14 if (string.IsNullOrEmpty(strBiblioRecPath) == true) { strBiblioRecPath = this.BiblioRecPath; } #endif string strAutogenDataCfgFilename = ""; string strFormat = ""; if (StringUtil.HasHead(strBiblioRecPath, "format:") == true) { strFormat = strBiblioRecPath.Substring("format:".Length); strAutogenDataCfgFilename = Path.Combine(Program.MainForm.DataDir, strFormat + "_cfgs/" + this.ScriptFileName); } else { // 库名部分路径 string strBiblioDbName = Global.GetDbName(strBiblioRecPath); if (string.IsNullOrEmpty(strBiblioDbName) == true) { return(0); } strAutogenDataCfgFilename = strBiblioDbName + "/cfgs/" + this.ScriptFileName; } bool bAssemblyReloaded = false; // 如果必要,重新准备Assembly if (m_autogenDataAssembly == null || m_strAutogenDataCfgFilename != strAutogenDataCfgFilename) { this.m_autogenDataAssembly = Program.MainForm.AssemblyCache.FindObject(strAutogenDataCfgFilename); this.m_detailHostObj = null; // 如果Cache中没有现成的Assembly if (this.m_autogenDataAssembly == null) { string strCode = ""; string strRef = ""; #if NO byte[] baCfgOutputTimestamp = null; // return: // -1 error // 0 not found // 1 found nRet = this._myForm.GetCfgFileContent(strAutogenDataCfgFilename, out strCode, out baCfgOutputTimestamp, out strError); if (nRet == -1) { goto ERROR1; } if (nRet == 0) { IDetailHost host = null; if (this.DetailHostType != null) { host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); } else { host = new DetailHost(); } host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return(1); } string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; nRet = this._myForm.GetCfgFileContent(strCfgFilePath, out strRef, out baCfgOutputTimestamp, out strError); if (nRet == -1 /*|| nRet == 0*/) // .ref 文件可以没有 { goto ERROR1; } #endif if (string.IsNullOrEmpty(strFormat) == false) { nRet = GetCodeFromLocal( strAutogenDataCfgFilename, out strCode, out strRef, out strError); } else { // 从服务器获得两个配置文件的内容 nRet = GetCode( strAutogenDataCfgFilename, out strCode, out strRef, out strError); } if (nRet == -1) { goto ERROR1; } if (nRet == 1) { return(1); } try { // 准备Assembly Assembly assembly = null; nRet = GetCsScriptAssembly( strCode, strRef, out assembly, out strError); if (nRet == -1) { strError = "编译脚本文件 '" + strAutogenDataCfgFilename + "' 时出错:" + strError; goto ERROR1; } // 记忆到缓存 Program.MainForm.AssemblyCache.SetObject(strAutogenDataCfgFilename, assembly); this.m_autogenDataAssembly = assembly; bAssemblyReloaded = true; } catch (Exception ex) { strError = "准备脚本代码过程中发生异常: \r\n" + ExceptionUtil.GetDebugText(ex); goto ERROR1; } } bAssemblyReloaded = true; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; // 至此,Assembly已经纯备好了 Debug.Assert(this.m_autogenDataAssembly != null, ""); } Debug.Assert(this.m_autogenDataAssembly != null, ""); // 准备 host 对象 if (this.m_detailHostObj == null || bAssemblyReloaded == true) { try { IDetailHost host = null; nRet = NewHostObject( out host, out strError); if (nRet == -1) { strError = "准备脚本文件 '" + m_strAutogenDataCfgFilename + "' 时出错:" + strError; goto ERROR1; } this.m_detailHostObj = host; } catch (Exception ex) { strError = "准备脚本代码过程中发生异常: \r\n" + ExceptionUtil.GetDebugText(ex); goto ERROR1; } } Debug.Assert(this.m_detailHostObj != null, ""); if (bAssemblyReloaded == true) { return(1); } return(0); ERROR1: return(-1); }
// 从服务器获得两个配置文件的内容 // return: // -1 出错 // 0 正常返回 // 1 配置文件没有找到,但 host 已经初始化 int GetCode( string strAutogenDataCfgFilename, out string strCode, out string strRef, out string strError) { strError = ""; strCode = ""; strRef = ""; byte[] baCfgOutputTimestamp = null; // return: // -1 error // 0 not found // 1 found int nRet = this._myForm.GetCfgFileContent(strAutogenDataCfgFilename, out strCode, out baCfgOutputTimestamp, out strError); if (nRet == -1) { return(-1); } if (nRet == 0) { IDetailHost host = null; if (this.DetailHostType != null) { host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); } else { host = new DetailHost(); } host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return(1); } string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; nRet = this._myForm.GetCfgFileContent(strCfgFilePath, out strRef, out baCfgOutputTimestamp, out strError); if (nRet == -1 /*|| nRet == 0*/) // .ref 文件可以没有 { return(-1); } return(0); }
// 从本地获得两个配置文件的内容 // return: // -1 出错 // 0 正常返回 // 1 配置文件没有找到,但 host 已经初始化 int GetCodeFromLocal( string strAutogenDataCfgFilename, out string strCode, out string strRef, out string strError) { strError = ""; strCode = ""; strRef = ""; if (File.Exists(strAutogenDataCfgFilename) == false) { IDetailHost host = null; if (this.DetailHostType != null) { host = (IDetailHost)DetailHostType.InvokeMember(null, BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance, null, null, null); } else { host = new DetailHost(); } host.Assembly = null; host.Form = this._myForm; host.DetailWindow = this._myForm as IBiblioItemsWindow; this.m_detailHostObj = host; m_strAutogenDataCfgFilename = strAutogenDataCfgFilename; this.m_autogenDataAssembly = Assembly.GetAssembly(this.GetType()); // 充数 return(1); } Encoding encoding; // 能自动识别文件内容的编码方式的读入文本文件内容模块 // parameters: // lMaxLength 装入的最大长度。如果超过,则超过的部分不装入。如果为-1,表示不限制装入长度 // return: // -1 出错 strError中有返回值 // 0 文件不存在 strError中有返回值 // 1 文件存在 // 2 读入的内容不是全部 int nRet = FileUtil.ReadTextFileContent(strAutogenDataCfgFilename, -1, out strCode, out encoding, out strError); if (nRet != 1) { return(-1); } string strCfgFilePath = strAutogenDataCfgFilename + ".ref"; // strBiblioDbName + "/cfgs/" + this.ScriptFileName + ".ref"; if (File.Exists(strCfgFilePath) == true) { nRet = FileUtil.ReadTextFileContent(strCfgFilePath, -1, out strRef, out encoding, out strError); if (nRet != 1) { return(-1); } } return(0); }