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



我们已经为20102013和2016构建了一个outlook插件。我们创建了一个OL2010vsto项目,并篡改了.csproj文件(1*)。问题是2013/2016年添加的类型很少,我们无法访问它们。当然,我们只想在使用相应OL版本的情况下访问它们。

据我所知:互操作程序集随加载项一起交付。因此,理论上可以注入一些IL代码,或者提供具有相同命名空间的附加程序集来提供这些缺失的类型。由于这些互操作程序集只是COM Wrapper,并且其功能依赖于已安装的Outlook版本提供的非托管代码,因此在正确导入时应无缝加载它们。

这在某种程度上可行吗?如果我尝试这个/将加载项部署到客户端,会出现什么问题
如何确定是否需要使用更高版本的互操作类型
如何加载更高的互操作类型
如何在不冲突现有类型的情况下使用它
正如我想要Intellisense和静态类型。我必须预定义这些类型,并用Guid、CoClass和TypeLibType来装饰它们。够了吗?


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

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

谢谢你的回答!

"手动创建互操作:在Visual Studio中,只需将对Office 2000套件应用程序的COM引用添加到项目中即可。这会自动创建所需的互操作。但这正是问题的开始:大量类和事件无法访问,因为Office类型库中的许多相同错误使Studio创建的互操作对您不起作用。您可以反汇编互操作,公开不可用的类和事件,然后重新编译它(ildasm.exe和ilasm.exe)。这正是创建外接程序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/netoffice/NetOffice-NuGet
它包含与版本无关的互操作程序集,尽管结构和命名空间不匹配。。。但仍然可能有用。

最新更新