title: How to call a VSTO AddIn method from a separate C# project?
body: <p>I have a C# Excel Add-in project "MyExcelAddIn" that has a public method Foo() to do something complex. For testing purposes, the add-in also defines a toolbar button which is wired to Foo() so I can test this and verify that clicking the button calls Foo() and does what I want it to do. This is fine.</p>
  
  <p>Now I want to call this method from a C# Windows Forms project. In the Windows Forms project I can create an Excel instance and make it visible and verify that my VSTO add-in is running as I can see the button and it works. But I can't work out how to call Foo() programatically from the Windows Forms project. I've googled a bit and got as far as getting the "MyExcelAddIn" COMAddIn object, but can't work out how to call Foo().</p>
  
  <p>It looks something like this:</p>
  
  <pre><code>// Create Excel and make it visible
  Application excelApp = new Application();
  excelApp.Visible = true;
  
  // I know my VSTO add-in is running because I can see my test button
  // Now get a reference to my VSTO add-in
  Microsoft.Office.Core.COMAddIns comAddIns = _excelApp.COMAddIns;
  object addinName = "MyExcelAddIn";
  Microsoft.Office.Core.COMAddIn myAddin = comAddIns.Item(ref addinName);
  // This works, but now what? How do I make a call on myAddin?
  // Note that myAddin.Object is null...
  </code></pre>
  
  <p>So I want to know what I can do to call Foo() from my Windows Forms application. Note that I have full control over both the Windows Forms application and the add-in and I suspect I have to make changes to both of them (particularly the add-in) but I have no idea how to do this.</p>
  
  <p>Note that this is a VS2008 C# application and I'm using Excel 2003.</p>