2016-07-27 46 views
-1

我們已經成功構建了2010,2013和2016的outlook插件。我們創建了一個OL2010 vsto項目,並使用.csproj文件(1 *)撥弄。問題是2013/2016年增加了幾種類型,我們無法訪問它們。我們只想訪問它們,如果當然使用各自的OL版本。c#outlook插件vsto訪問OL2016使用OL2010時的互操作性PIA

據我瞭解整個事情: 互操作程序集隨附在插件中。所以它在理論上可能注入一些IL代碼或提供具有相同名稱空間的附加程序集以提供缺少的類型。由於這些Interop程序集只有COM Wrapper,並且該函數依賴於由安裝的Outlook版本提供的非託管代碼,所以在正確導入時應該可以無縫加載。

這是不是可行? 如果我嘗試這個/將插件部署到客戶端,會出現什麼問題?
我如何繼續確定是否需要使用更高版本的Interop類型?
如何加載更高的Interop類型?
如何在不衝突現有類型的情況下使用它?
正如我想要的Intellisense和靜態類型。我必須預先定義這些類型,並用Guid,CoClass和TypeLibType對它們進行裝飾。這足夠嗎? 。


(1 *)(我們改變了DebugInfoExeName和OfficeVersion在ProjectName.csproj文件,並創建相應的安裝程序與在相應的Outlook版本安裝不同的虛擬機可能有一個更簡單的方法? - >讓我知道!...可悲的是,我們不能使用插件 - 快遞,因爲一些原因。

我最好不要使用完整的OL 2016互操作程序集,因爲它是從其他線程並且我們有一些同步代碼必須在後臺運行。

謝謝你的回答!

+0

一個程序來實現那個鏈接中描述https://www.add-in-express.com/creating-addins-blog/2010/03/16/interop-assemblies-late-binding/(支持幾個Office版本在一個加載項中,互操作程序集和後期綁定)。無論如何,任何建議仍然受到高度讚賞。 – FreeG

+0

Microsoft Interop教程https://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx(COM Interop第1部分:C#客戶機教程) – FreeG

回答

0

「手動創建互操作:在Visual Studio中,只需將一個COM引用添加到Office 2000套件的應用程序到項目中即可自動創建所需的互操作,但這是問題開始的地方:因爲Office類型庫中的許多相同的錯誤會使Studio創建不適合您的互操作,您可以反彙編互操作,公開不可用的類和事件,然後重新編譯它(ildasm.exe和ilasm.exe),這正是Add-in Express版本中立的interop創建的方式。「 來源:https://social.msdn.microsoft.com/Forums/en-US/a95cd4e3-e619-4846-be2a-ce4c235ff457/is-it-possible-to-use-the-microsoftofficeinteropoutlook-that-comes-from-office-2010-with-all?forum=outlookdev

編輯

結帳這個項目 https://github.com/caioproiete/NetOffice-NuGet
它包含版本中性互操作程序集雖然結構和命名空間不匹配......但仍然可能是有用的。