Listing 3 The EngineHost class from class1.cs in the C# project
class EngineHost { public EngineHost () { try { myengine = new Microsoft.VisualBasic.Vsa.VsaEngine(); myengine.RootMoniker = mymoniker; myengine.GenerateDebugInfo = false; myItems = myengine.Items; systemRef = (Microsoft.Vsa.IVsaReferenceItem) myItems.CreateItem("system.dll", Microsoft.Vsa.VsaItemType.Reference, Microsoft.Vsa.VsaItemFlag.None); systemRef.AssemblyName = "system.dll"; systemRef=(Microsoft.Vsa.IVsaReferenceItem)myItems.CreateItem("system.web.dll", Microsoft.Vsa.VsaItemType.Reference, Microsoft.Vsa.VsaItemFlag.None); systemRef.AssemblyName = "system.web.dll"; myengine.Items.CreateItem("mscorlib.dll", Microsoft.Vsa.VsaItemType.Reference, Microsoft.Vsa.VsaItemFlag.None); myScript = (Microsoft.Vsa.IVsaCodeItem) myItems.CreateItem("scriptcode", Microsoft.Vsa.VsaItemType.Code, Microsoft.Vsa.VsaItemFlag.None); tempRef = (Microsoft.Vsa.IVsaGlobalItem)myengine.Items.CreateItem ("UISReport", Microsoft.Vsa.VsaItemType.AppGlobal, Microsoft.Vsa.VsaItemFlag.None); tempRef.TypeString="System.Object"; mysite = new JVsaSite(); myengine.Site = mysite; mylang = myengine.Language; string thing = myengine.RootNamespace; myengine.RootNamespace = "UISTesting"; myengine.InitNew(); } catch (Exception e) { string thing = e.ToString(); MessageBox.Show(thing, "Engine Constructor Error"); } } private Microsoft.VisualBasic.Vsa.VsaEngine myengine; private const string mymoniker = "UIS.scripthappens://macros/"; private string mylang; private Microsoft.Vsa.IVsaReferenceItem systemRef; private Microsoft.Vsa.IVsaGlobalItem tempRef; private Microsoft.Vsa.IVsaItems myItems; private Microsoft.Vsa.IVsaCodeItem myScript; private JVsaSite mysite; private void CallMain () { System.Reflection.Assembly myassm = myengine.Assembly; Type[] types = myassm.GetTypes(); object ores; foreach (Type ti in types) { MemberInfo[] members = ti.GetMember("Main"); if (members.Length > 0) { ores = ti.InvokeMember("Main", BindingFlags.Static | BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.IgnoreCase,null, null, null); break; } } } public void Runit () { try { if (myengine.IsRunning) myengine.Reset(); myengine.Compile(); if (myengine.IsCompiled) { //myengine.SaveCompiledState (out pe, out pdb); myengine.Run (); CallMain(); } else mysite.ShowErrors(); } catch (Exception e) { string thing = e.ToString(); MessageBox.Show(thing, "Compile/Run error"); } } public void AddCode(string src) { myScript.AppendSourceText (src + "\n"); } }