title: Embedding IronScheme in a C# app
body: <p>I'm trying to add a plugin architecture to my C# app. I've chosen <a href="http://codeplex.com/ironscheme" rel="nofollow noreferrer">IronScheme</a> as the language, and also because it's built on the DLR, which should make it easier to embed.</p>
  
  <p>On the Codeplex Wiki, they have the <a href="http://ironscheme.codeplex.com/Wiki/View.aspx?title=EmbedIronScheme&amp;referringTitle=Home" rel="nofollow noreferrer">following example</a>.
  I changed it slightly:</p>
  
  <pre><code>public class PluggerInner
  {
      IScriptEngine scheme;
  
      public PluggerInner()
      {
          InitScheme();
      }
  
      private void InitScheme()
      {
          var domMgr = ScriptDomainManager.CurrentManager;
          var schemePrv = new IronSchemeLanguageProvider(domMgr);
  
          scheme = schemePrv.GetEngine();
      }
  
      public void RunSchemePlugin(string fileName)
      {
          scheme.ExecuteFile(fileName);
      }
  
      public void RunPlugins()
      {
          foreach (var fl in new DirectoryInfo("../../plugins").GetFiles())
          {
              if (fl.Extension == ".ss")
              {
                  RunSchemePlugin(fl.FullName);
              }
          }
      }
  }
  </code></pre>
  
  <p>(This is executed basically as <code>new PluggerInner().RunPlugins()</code>)</p>
  
  <p>It finds my example <code>.ss</code> file in the directory (yes, I know I shouldn't use <code>../..</code>), but throws a <em>massive</em> error on this line:</p>
  
  <pre><code>scheme.ExecuteFile(fileName);
  </code></pre>
  
  <p>The exception I get is:</p>
  
  <pre>
  IronScheme.Runtime.R6RS.CompoundCondition was unhandled
    Source="IronScheme"
    StackTrace:
         at IronScheme.Runtime.R6RS.Exceptions.Raise(Object obj)
         at IronScheme.Runtime.R6RS.Exceptions.RaiseContinueable(Object obj)
         at IronScheme.Runtime.Builtins.UndefinedError(Object sym)
         at IronScheme.IronSchemeLanguageContext.MissingName(SymbolId name)
         at Microsoft.Scripting.ModuleGlobalWrapper.GetCachedValue()
         at Microsoft.Scripting.ModuleGlobalWrapper.get_CurrentValue()
         at hello.Initialize(CodeContext )
         at Microsoft.Scripting.ScriptCode.Run(CodeContext codeContext, Boolean tryEvaluate)
         at Microsoft.Scripting.ScriptModule.Execute()
         at Microsoft.Scripting.Hosting.ScriptEngine.ExecuteFile(String path)
         at ExEdit.PluggerInner.RunSchemePlugin(String fileName) in D:\VSProjects\ExEdit\Infra.cs:line 35
         at ExEdit.PluggerInner.RunPlugins() in D:\VSProjects\ExEdit\Infra.cs:line 44
         at ExEdit.MainForm.MainForm_Load(Object sender, EventArgs e) in D:\VSProjects\ExEdit\MainForm.cs:line 22
         at System.Windows.Forms.Form.OnLoad(EventArgs e)
         at System.Windows.Forms.Form.OnCreateControl()
         at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
         at System.Windows.Forms.Control.CreateControl()
         at System.Windows.Forms.Control.WmShowWindow(Message& m)
         at System.Windows.Forms.Control.WndProc(Message& m)
         at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
         at System.Windows.Forms.ContainerControl.WndProc(Message& m)
         at System.Windows.Forms.Form.WmShowWindow(Message& m)
         at System.Windows.Forms.Form.WndProc(Message& m)
         at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
         at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
         at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
         at System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
         at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
         at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
         at System.Windows.Forms.Control.set_Visible(Boolean value)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
         at System.Windows.Forms.Application.Run(Form mainForm)
         at ExEdit.Program.Main() in D:\VSProjects\ExEdit\Program.cs:line 18
         at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
         at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
         at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
         at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
         at System.Threading.ThreadHelper.ThreadStart()
    InnerException: 
  </pre>
  
  <p>My example Scheme code:</p>
  
  <pre><code>(define (test) (+ 1 1))
  </code></pre>
  
  <p>I have no idea what the exception is actually talking about, as it has no InnerException.</p>