2011-02-24 41 views
2

所有,如何VSTO項目

這是一個跟進我的問題here內註冊UDF/RTD。

我的設置:

  • 的Visual Studio 10
  • 語言C#
  • 的Excel 2007+
  • 的Windows XP +

我想實現的是:

  • 與自定義功能區組件和自定義任務窗格
  • 創建VSTO加載項爲Excel創建RTD服務器
  • 創建一些UDF的那個包裹=RTD() -calls的Excel用戶
  • 有客戶端通過一個安裝加載項ClickOnce安裝

除了最後一項要求,我基本上完成了。我遇到的唯一問題是無需使用regasm.exe即可在目標機器上註冊RTD服務器和UDF。 我基本上希望客戶端確實點擊一次,然後忘記它,特別是因爲有數百個潛在用戶,全部分佈在全球各地。另外,由於它們在技術上並不精通,所以我不希望它們必須手動註冊COM組件或類似的東西。

我不介意UDF和RTD服務器是否是一個單獨的項目,只要我可以通過ClickOnce將它們與VSTO插件一起包含並註冊。

我查看了免註冊的COM,但並不是爲了讓我能夠在VSTO插件中工作。 我所做的是創建第二個項目(library class),並嘗試導出並註冊COM互操作,然後將其包含到我的「主」項目中並在那裏使用它:它不會編譯(Cannot embed interop types from assembly [...] because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute)或不註冊。

在我的需求的單獨部分,互聯網上有負載和負載的例子,但沒有完整的monty。

我完全偏離了這裏嗎?有人可以請我指出正確的方向,理想情況下提供一些示例代碼/配置?

乾杯, 澈

回答

1

這可以使用在安裝過程中運行RegAsm.exe一個安裝程序類來實現。請參閱: How to register a .NET CCW with regasm from a Visual Studio 2008 Setup project

希望這有助於 弗蘭克

+0

非常感謝,這指出我的方向正確!我會接受這是正確的答案,並加上我自己的迴應。再次,非常感謝,我終於能夠解決這個微軟的噩夢... – LeChe 2011-03-02 14:50:30

+0

你的版本更清潔......感謝分享。我已經更新了自己的安裝程序來完成此操作。參見:http://stackoverflow.com/questions/5397607/howto-create-a-real-time-excel-automation-add-in-in-c-using-rtdserver – Frank 2011-03-23 16:50:38

2

由弗蘭克提供的鏈接的幫助上面,我終於結束了在我ThisAddin類這樣做:

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     RegistrationServices regsrv = new RegistrationServices(); 
     if (!regsrv.RegisterAssembly(GetType().Assembly, AssemblyRegistrationFlags.SetCodeBase)) 
     { 
      throw new Exception("Failed to register for COM Interop."); 
     } 
    } 

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e) 
    { 
     RegistrationServices regsrv = new RegistrationServices(); 
     if (!regsrv.UnregisterAssembly(GetType().Assembly)) 
     { 
      throw new Exception("Failed to unregister for COM Interop."); 
     } 
    } 

我知道,這是不理想的,但至少我確實知道,如果我的插件已啓動,所有COM對象都已註冊...

相關問題