将 COM 对象添加到 Asp Net Core

Adding COM Objects to Asp Net Core

我有一个使用 Interop.ADODB 的单元测试项目。这是代码:

public CDO.Message ReadMessage(string emlFileName)
{
    if (string.IsNullOrEmpty(emlFileName)) return null;
    CDO.Message msg = new CDO.MessageClass();
    ADODB.Stream stream = new ADODB.StreamClass();
    stream.Open(Type.Missing,
        ADODB.ConnectModeEnum.adModeUnknown,
        ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, string.Empty, string.Empty);
    stream.LoadFromFile(emlFileName);
    stream.Flush();
    msg.DataSource.OpenObject(stream, "_Stream");
    msg.DataSource.Save();
    return msg;
}

问题是我将此项目转换为 .NET Core。我不知道如何导入使此方法起作用所需的 COM 库。我需要的是 Interop.ADODBInterop.CDO.

此方法所做的只是获取一个电子邮件文件并将其转换为对象,以便我可以从中读取值,然后与发送的电子邮件进行比较。真正简单的单元测试来验证电子邮件内容。

有没有一种方法可以让我导入 COM 对象,或者是否有一个库可以替代我现在想使用的 CDO.Message

不建议从 .NET Core 访问 COM 对象,因为 .NET Core 应用程序被设计为独立于平台,并且 ADODB.StreamCDO.Message 等 COM 对象特定于 Windows.

但是,这确实是可能的 - 如果您不介意后期绑定和弱类型。

dynamic msg = Activator.CreateInstance(Type.GetTypeFromProgID("CDO.Message", true));

...

dynamic stream = Activator.CreateInstance(Type.GetTypeFromProgID("ADODB.Stream", true));

等等

这适用于 .NET Core 2.0,当 运行 在 Windows 上时。显然,according to this article,在以前的版本中是不可能的。

不过,最好使用托管的平台中立代码重写您的方法。