首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# Marshal.GetActiveObject()在.NET 5.0上的Outlook自动化替代方案

C# Marshal.GetActiveObject()在.NET 5.0上的Outlook自动化替代方案
EN

Stack Overflow用户
提问于 2020-11-23 09:39:29
回答 2查看 1.5K关注 0票数 3

我将从外部应用程序开始一个新的Outlook交互项目(邮件主题处理,清除Re: Fw:等主题)。在外部DB中添加主题标记、研究主题标记等)。我习惯于调用Marshall.GetActiveObject()方法来控制已经在运行的Outlook Application

随着.NET 5.0的发布,我发现Marshall.GetActiveObject()方法不再可用。

有别的办法吗?我希望使用.NET 5.0而不是.NET Framework,以避免.NET框架降级的任何进一步问题。

提前谢了,伙计们。

EN

回答 2

Stack Overflow用户

发布于 2020-11-23 17:13:12

Outlook是一个单例--始终只有一个outlook.exe实例在运行。绝对没有理由使用Marshall.GetActiveObject() --始终使用new运算符创建Outlook.Application对象的新实例。

票数 0
EN

Stack Overflow用户

发布于 2021-12-26 00:44:50

如果有帮助的话,我也在同一条船上--尝试将Outlook代码移植到Net5,但不使用GetActiveObject("Outlook.Application") as Outlook.Application;来获得对正在运行的Outlook应用程序的引用。我的NETFramework4.8代码在几年内运行良好,因此当然可以使用GetActiveObject来完成这项工作。

但是有了Net5,我很难找到一种方法来引用Office应用程序。我在下面显示了与Outlook一起工作的代码(尽管我认为它不应该)。

代码语言:javascript
运行
复制
NET 4.8 (works)
var o = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;

NET 5.0 (works)
var o = Marshal.BindToMoniker("Outlook.Application") as Outlook.Application;

我不知道为什么BindToMoniker工作-我认为这需要一个路径名作为一个论点。无论如何,它在Windows11 NET5.0上工作,项目TargetFramework和Interop.Outlook参考如下所示。

代码语言:javascript
运行
复制
<PropertyGroup>
        <TargetFramework>net5.0-windows</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <COMReference Include="Microsoft.Office.Interop.Outlook">

我仍然困在如何获得运行Excel,Access,Word等Office应用程序的参考。

UPDATE为我提供了一个指向解决方案的链接,该解决方案是创建我自己的MarshalGet2.ActiveObject接口,如本文所示:

How to connect an open excel application in net.core 3.1?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64965895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档