-1

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

据我了解整个事情:互操作程序集与插件一起提供。因此,理论上可以注入一些 IL 代码或提供具有相同命名空间的附加程序集,以提供那些缺失的类型。由于这些互操作程序集只是 COM 包装器,并且功能依赖于已安装的 Outlook 版本提供的非托管代码,因此它们应该在正确导入时无缝加载。

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


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

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

感谢您的任何回答!

4

1 回答 1

0

“手动创建互操作:在 Visual Studio 中,只需向项目中添加对 Office 2000 套件应用程序的 COM 引用。这会自动创建您需要的互操作。但这正是您的问题开始的地方:大量的类和事件无法访问,因为 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-c​​omes-from- office-2010-with-all?forum=outlookdev

编辑

签出这个项目 https://github.com/netoffice/NetOffice-NuGet
它包含版本中性互操作程序集,尽管结构和命名空间不匹配......但仍然可能有用。

于 2016-08-01T20:25:04.370 回答