c# outlook addin vsto 在使用 OL2010 PIA 时访问 OL2016 Interop
c# outlook addin vsto access OL2016 Interop while working with OL2010 PIA
我们已经成功地为 2010、2013 和 2016 构建了一个 outlook 插件。我们已经创建了一个 OL2010 vsto 项目并摆弄了 .csproj 文件 (1*)。问题是 2013/2016 中添加的类型很少,我们无法访问它们。当然,如果使用相应的 OL 版本,我们只想访问它们。
据我了解整个事情:
Interop 程序集随插件一起提供。因此,理论上可以注入一些 IL 代码或提供具有相同命名空间的附加程序集,以提供那些缺失的类型。由于这些 Interop 程序集只是 COM 包装器,并且功能依赖于已安装的 Outlook 版本提供的非托管代码,因此在正确导入时它们应该可以无缝加载。
这在某种程度上可行吗?
如果我尝试 this/deploy 客户端插件会出什么问题?
我如何继续确定是否需要使用更高版本的互操作类型?
我如何加载更高的互操作类型?
如何在不与现有类型冲突的情况下使用它?
因为我想要 Intellisense 和静态类型。我必须预定义这些类型并用 Guid、CoClass 和 TypeLibType 修饰它们。够了吗?
(1*)(我们更改了 ProjectName.csproj 文件中的 DebugInfoExeName 和 OfficeVersion,并使用安装了相应 outlook 版本的不同虚拟机构建了各自的安装程序。也许有更简单的方法?- > 让我知道!...很遗憾,由于某些原因我们不能使用 addin-express。
我最好不要使用完整的 OL 2016 互操作程序集,因为当从主线程以外的其他线程使用时它会抛出异常。我们有一些同步代码必须在后台 运行。
感谢您的任何回答!
"Creating interops manually: In Visual Studio, just add a COM reference to an application of the Office 2000 suite to the project. This automatically creates the interop you need. But it is the point where your problem begins: a great number of classes and events are inaccessible, because a number of identical bugs in Office type libraries make Studio create the interop that will not work for you. You can disassemble the interop, make unavailable classes and events public, and recompile it (ildasm.exe and ilasm.exe). This is exactly the way Add-in Express version-neutral interops were created."
来源: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
它包含版本中立的互操作程序集,尽管结构和名称空间不匹配...但仍然有用。
我们已经成功地为 2010、2013 和 2016 构建了一个 outlook 插件。我们已经创建了一个 OL2010 vsto 项目并摆弄了 .csproj 文件 (1*)。问题是 2013/2016 中添加的类型很少,我们无法访问它们。当然,如果使用相应的 OL 版本,我们只想访问它们。
据我了解整个事情: Interop 程序集随插件一起提供。因此,理论上可以注入一些 IL 代码或提供具有相同命名空间的附加程序集,以提供那些缺失的类型。由于这些 Interop 程序集只是 COM 包装器,并且功能依赖于已安装的 Outlook 版本提供的非托管代码,因此在正确导入时它们应该可以无缝加载。
这在某种程度上可行吗?
如果我尝试 this/deploy 客户端插件会出什么问题?
我如何继续确定是否需要使用更高版本的互操作类型?
我如何加载更高的互操作类型?
如何在不与现有类型冲突的情况下使用它?
因为我想要 Intellisense 和静态类型。我必须预定义这些类型并用 Guid、CoClass 和 TypeLibType 修饰它们。够了吗?
(1*)(我们更改了 ProjectName.csproj 文件中的 DebugInfoExeName 和 OfficeVersion,并使用安装了相应 outlook 版本的不同虚拟机构建了各自的安装程序。也许有更简单的方法?- > 让我知道!...很遗憾,由于某些原因我们不能使用 addin-express。
我最好不要使用完整的 OL 2016 互操作程序集,因为当从主线程以外的其他线程使用时它会抛出异常。我们有一些同步代码必须在后台 运行。
感谢您的任何回答!
"Creating interops manually: In Visual Studio, just add a COM reference to an application of the Office 2000 suite to the project. This automatically creates the interop you need. But it is the point where your problem begins: a great number of classes and events are inaccessible, because a number of identical bugs in Office type libraries make Studio create the interop that will not work for you. You can disassemble the interop, make unavailable classes and events public, and recompile it (ildasm.exe and ilasm.exe). This is exactly the way Add-in Express version-neutral interops were created." 来源: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
它包含版本中立的互操作程序集,尽管结构和名称空间不匹配...但仍然有用。