将COM对象添加到Asp Net Core

Boj*_*jan 5 c# unit-testing email-validation asp.net-core-mvc 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;
}
Run Code Online (Sandbox Code Playgroud)

问题是我将这个项目转换为.NET Core.我无法弄清楚如何导入我需要使这个方法工作的COM库.我需要的是Interop.ADODBInterop.CDO.

所有这个方法都是采用电子邮件文件并转换为对象,以便我可以从中读取值,然后与发送的电子邮件进行比较.真的是一个简单的单元测试来验证电子邮件内容.

有没有办法让我导入COM对象,或者是否有一个库替换CDO.Message了我现在想要使用的库?

Mat*_*int 9

这是不明智访问来自.NET核心COM对象,.NET的核心应用程序被设计成独立的平台,和COM对象,比如ADODB.StreamCDO.Message特定于Windows.

但是,确实有可能 - 如果你不介意后期绑定和弱打字.

dynamic msg = Activator.CreateInstance(Type.GetTypeFromProgID("CDO.Message", true));
Run Code Online (Sandbox Code Playgroud)

...

dynamic stream = Activator.CreateInstance(Type.GetTypeFromProgID("ADODB.Stream", true));
Run Code Online (Sandbox Code Playgroud)

等等

当在Windows上运行时,这适用于.NET Core 2.0.显然,根据这篇文章,在以前的版本中是不可能的.

尽管如此,使用托管平台中立代码重写您的方法会更好.