将 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.ADODB
和 Interop.CDO
.
此方法所做的只是获取一个电子邮件文件并将其转换为对象,以便我可以从中读取值,然后与发送的电子邮件进行比较。真正简单的单元测试来验证电子邮件内容。
有没有一种方法可以让我导入 COM 对象,或者是否有一个库可以替代我现在想使用的 CDO.Message
?
不建议从 .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));
等等
这适用于 .NET Core 2.0,当 运行 在 Windows 上时。显然,according to this article,在以前的版本中是不可能的。
不过,最好使用托管的平台中立代码重写您的方法。
我有一个使用 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
?
不建议从 .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));
等等
这适用于 .NET Core 2.0,当 运行 在 Windows 上时。显然,according to this article,在以前的版本中是不可能的。
不过,最好使用托管的平台中立代码重写您的方法。