void Init() { lock (this) { if (_UseCompression != -1) { return; } _UseCompression = 0; // assume failure; and use the builtin MS routines try { // Load the assembly _Assembly = XmlUtil.AssemblyLoadFrom(_CodeModule); // Load up a test stream to make sure it will work object[] args = new object[] { new MemoryStream() }; Stream so = _Assembly.CreateInstance(_ClassName, false, BindingFlags.CreateInstance, null, args, null, null) as Stream; if (so != null) { // we've successfully inited so.Close(); _UseCompression = 1; } else { _Assembly = null; } if (_Finish != null) { Type theClassType = so.GetType(); this._FinishMethodInfo = theClassType.GetMethod(_Finish); } } catch (Exception e) { _ErrorMsg = e.InnerException == null ? e.Message : e.InnerException.Message; _UseCompression = 0; // failure; force use the builtin MS routines } } }
static public void Init() { if (_Assembly != null) { return; } lock (typeof(ZipWrap)) { try { _Assembly = XmlUtil.AssemblyLoadFrom(ZIPNAME); _ZipError = string.Empty; } catch (Exception ex) { _ZipError = ex.ToString(); // record error for later } } }
static void GetCustomReportItem(Dictionary <string, CustomReportItemEntry> crieDir, XmlNode xNode) { string friendlyTypeName = null; string codemodule = null; string classname = null; foreach (XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) { continue; } switch (xNodeLoop.Name) { case "Type": friendlyTypeName = xNodeLoop.InnerText; break; case "CodeModule": codemodule = xNodeLoop.InnerText; break; case "ClassName": classname = xNodeLoop.InnerText; break; default: break; } } if (friendlyTypeName == null) { return; // nothing to do if no provider specified } CustomReportItemEntry crie; try { // load the module early; saves problems with concurrency later string msg = null; Type dotNetType = null; Assembly la = null; if (codemodule != null && classname != null) { // Check to see if previously loaded. Many CustomReportItems share same CodeModule. Assembly[] allLoadedAss = AppDomain.CurrentDomain.GetAssemblies(); foreach (Assembly ass in allLoadedAss) { if (ass.Location.Equals(codemodule, StringComparison.CurrentCultureIgnoreCase)) { la = ass; break; } } if (la == null) // not previously loaded? { la = XmlUtil.AssemblyLoadFrom(codemodule); } if (la == null) { msg = string.Format("{0} could not be loaded", codemodule); } else { dotNetType = la.GetType(classname); } } crie = new CustomReportItemEntry(friendlyTypeName, dotNetType, msg); crieDir.Add(friendlyTypeName, crie); } catch (Exception e) { // keep exception; if this CustomReportItem is ever used we will see the message crie = new CustomReportItemEntry(friendlyTypeName, null, e.Message); crieDir.Add(friendlyTypeName, crie); } }
static void GetDataSource(IDictionary dsDir, XmlNode xNode) { string provider = null; string codemodule = null; string cname = null; string inter = "SQL"; string tselect = null; bool replaceparameters = false; foreach (XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) { continue; } switch (xNodeLoop.Name) { case "DataProvider": provider = xNodeLoop.InnerText; break; case "CodeModule": codemodule = xNodeLoop.InnerText; break; case "Interface": inter = xNodeLoop.InnerText; break; case "ClassName": cname = xNodeLoop.InnerText; break; case "TableSelect": tselect = xNodeLoop.InnerText; break; case "ReplaceParameters": if (xNodeLoop.InnerText.ToLower() == "true") { replaceparameters = true; } break; default: break; } } if (provider == null) { return; // nothing to do if no provider specified } SqlConfigEntry sce; try { // load the module early; saves problems with concurrency later string msg = null; Assembly la = null; if (codemodule != null && cname != null) { // check to see if the DLL has been previously loaded // many of the DataProvider done by ReportingCloud are in a single code module foreach (SqlConfigEntry sc in dsDir.Values) { if (sc.FileName == codemodule && sc.CodeModule != null) { la = sc.CodeModule; break; } } if (la == null) { la = XmlUtil.AssemblyLoadFrom(codemodule); } if (la == null) { msg = string.Format("{0} could not be loaded", codemodule); } } sce = new SqlConfigEntry(provider, codemodule, cname, la, tselect, msg); dsDir.Add(provider, sce); } catch (Exception e) { // keep exception; if this DataProvided is ever useed we will see the message sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, e.Message); dsDir.Add(provider, sce); } sce.ReplaceParameters = replaceparameters; }