2016-07-27 49 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
它包含版本中性互操作程序集虽然结构和命名空间不匹配......但仍然可能是有用的。