我们已经成功构建了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互操作程序集,因为当从主线程以外的其他线程使用它时会抛出异常。我们有一些必须在后台运行的同步代码。
感谢您的回答!
答案 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
它包含版本中立的互操作程序集,虽然结构和命名空间不匹配......但仍然有用。