我有一个使用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.ADODB
和Interop.CDO
。
所有这些方法都会获取一个电子邮件文件并转换为该对象,以便我可以从中读取值,然后与发送的电子邮件进行比较。真的是一个简单的单元测试来验证电子邮件内容。
我有没有办法导入COM对象,或者是否有一个替换CDO.Message
的库,我现在想用它?
答案 0 :(得分:9)
从.NET Core访问COM对象是不可取的,因为.NET Core应用程序设计为独立于平台,而ADODB.Stream
和CDO.Message
等COM对象特定于Windows
然而,确实有可能 - 如果你不介意后期绑定和弱打字。
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,在以前的版本中是不可能的。
但是,使用托管平台中立代码重写您的方法会更好。