c#outlook addin vsto在使用OL2010 PIA时访问OL2016 Interop

时间:2016-07-27 21:23:41

标签: c# vsto outlook-addin outlook-2010 outlook-2016

我们已经成功构建了2010,2013和2016年的Outlook插件。我们创建了一个OL2010 vsto项目并摆弄了.csproj文件(1 *)。问题是在2013/2016中添加的类型很少,我们无法访问它们。如果当然使用相应的OL版本,我们只想访问它们。

据我了解整件事: Interop组件随附加组件一起提供。因此,理论上可以注入一些IL代码或提供具有相同命名空间的附加程序集,以提供缺少的类型。由于这些Interop程序集只是COM Wrapper,而functionallity依赖于安装的Outlook版本提供的非托管代码,因此在正确导入时它们应该无缝加载。

这有点可行吗? 如果我尝试这个/将插件部署到客户端会出现什么问题? 我怎样才能确定是否需要使用更高版本的Interop Type?
如何加载更高的Interop Type?
如何在不冲突现有类型的情况下使用它? 因为我想要Intellisense和静态类型。我必须预先定义这些类型并使用Guid,CoClass和TypeLibType来装饰它们。这还够吗?

(1 *)(我们更改了ProjectName.csproj文件中的DebugInfoExeName和OfficeVersion,并使用安装了相应Outlook版本的不同虚拟机构建了相应的安装程序。也许有更简单的方法? - >让我知道!...遗憾的是,由于某些原因,我们无法使用addin-express。

我最好不要使用完整的OL 2016互操作程序集,因为当从主线程以外的其他线程使用它时会抛出异常。我们有一些必须在后台运行的同步代码。

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

"手动创建互操作:在Visual Studio中,只需将一个COM引用添加到项目的Office 2000套件的应用程序中。这会自动创建您需要的互操作。但是问题就出现了:大量的类和事件都无法访问,因为Office类型库中的许多相同的错误使Studio创建了不适合您的互操作。您可以反汇编互操作,使不可用的类和事件公开,并重新编译它(ildasm.exe和ilasm.exe)。这正是Add-in Express版本中立的互操作的创建方式。" 来源: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
它包含版本中立的互操作程序集,虽然结构和命名空间不匹配......但仍然有用。