c# - 将 COM 对象添加到 Asp Net Core

标签 c# unit-testing asp.net-core asp.net-core-mvc email-validation

我有一个使用 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 应用程序被设计为独立于平台,而 COM 对象如 ADODB.StreamCDO.Message 特定于 Windows。

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

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

...

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

等等

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

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

关于c# - 将 COM 对象添加到 Asp Net Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46866103/

相关文章:

c# - 如何获得 XDocument 的独立副本?

c# - 使用 Hololens 进行图像识别

unit-testing - 错误: undefined method 'x' for Nil (compile-time type is (Point | Nil))

Android:如何对 "IllegalStateException: Can not perform this action after onSaveInstanceState"进行单元测试

c# - Blazor WebAssembly 应用程序 - 来自浏览器的 API 调用 - 抱歉,此地址没有任何内容

c# - Unity 5 中的构建错误

c# - 在编译时检查操作系统?

java - PowerMockito 在父类(super class)静态方法上给出 InvalidUseOfMatchersException

javascript - HTML CSS 增加 SVG 图标的描边/厚度

c# - ASP.NET MVC - 创建操作链接保留查询字符串