static void GetCustomReportItem(XmlNode xNode) { string type = null; string codemodule = null; string classname = null; foreach (XmlNode xNodeLoop in xNode.ChildNodes) { if (xNodeLoop.NodeType != XmlNodeType.Element) { continue; } switch (xNodeLoop.Name) { case "Type": type = xNodeLoop.InnerText; break; case "CodeModule": codemodule = xNodeLoop.InnerText; break; case "ClassName": classname = xNodeLoop.InnerText; break; default: break; } } if (type == null) { return; // nothing to do if no provider specified } CustomReportItemEntry crie; try { // load the module early; saves problems with concurrency later string msg = null; Assembly la = null; if (codemodule != null && classname != null) { la = XmlUtil.AssemblyLoadFrom(codemodule); if (la == null) { msg = string.Format("{0} could not be loaded", codemodule); } } crie = new CustomReportItemEntry(type, classname, la, msg); CustomReportItemEntries.Add(type, crie); } catch (Exception e) { // keep exception; if this CustomReportItem is ever used we will see the message crie = new CustomReportItemEntry(type, classname, null, e.Message); CustomReportItemEntries.Add(type, crie); } }
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.Message; // record error for later } } }
internal Assembly LoadedAssembly() { if (bLoadFailed) // We only try to load once. { return(null); } if (_LoadedAssembly == null) { try { _LoadedAssembly = XmlUtil.AssemblyLoadFrom(_CodeModule); } catch (Exception e) { OwnerReport.rl.LogError(4, String.Format("CodeModule {0} failed to load. {1}", _CodeModule, e.Message)); bLoadFailed = true; } } return(_LoadedAssembly); }
static void GetDataSource(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) { la = XmlUtil.AssemblyLoadFrom(codemodule); if (la == null) { msg = string.Format("{0} could not be loaded", codemodule); } } sce = new SqlConfigEntry(provider, cname, la, tselect, msg); SqlEntries.Add(provider, sce); } catch (Exception e) { // keep exception; if this DataProvided is ever useed we will see the message sce = new SqlConfigEntry(provider, cname, null, tselect, e.Message); SqlEntries.Add(provider, sce); } sce.ReplaceParameters = replaceparameters; }
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) { var type = ass.GetType(); if (type.GetMethod("Location") != null) { 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) { // When running report server and RdlEngineConfig is configured for local directy // The file cannot be found without adding the current directoyr if (System.IO.File.Exists(codemodule) == false && System.IO.Path.GetFileName(codemodule) == codemodule) { if (AppDomain.CurrentDomain.RelativeSearchPath != null) { codemodule = System.IO.Path.Combine(AppDomain.CurrentDomain.RelativeSearchPath, codemodule); } else if (AppDomain.CurrentDomain.BaseDirectory != null) { codemodule = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, codemodule); } } if (System.IO.File.Exists(codemodule) == false) { sce = new SqlConfigEntry(provider, codemodule, cname, null, tselect, codemodule + " could not be found"); dsDir.Add(provider, sce); return; } // check to see if the DLL has been previously loaded // many of the DataProvider done by fyiReporting 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; }