【发布时间】:2019-10-02 09:00:46
【问题描述】:
我正在尝试使用AssemblyLoadContext(netcore 3.0 版存在)加载程序集,实例化一个对象并将该对象强制转换为接口,但出现强制转换异常错误。
该接口在加载程序集的项目和实例化的实现之间共享。该对象显然已正确实例化,但是当我执行(T)instance 时出现意外错误。
尝试使用观察者,我能够按照我正在使用的代码和观察者的屏幕截图将实例正确地投射到界面:
private (ExecutionAssemblyLoadContext, T) LoadTheAssemblyAndInstance<T>(string assemblyName, string typeNameToInstance)
{
var basePath = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var assemblyContext = new ExecutionAssemblyLoadContext($"{basePath}/{assemblyName}.dll");
var assembly = assemblyContext.LoadFromAssemblyPath($"{basePath}/{assemblyName}.dll");
var externalCodeEvent = typeNameToInstance != null ? assembly.ExportedTypes
.Where(x => x.FullName == typeNameToInstance)
.Single() : assembly.ExportedTypes.First();
var instance = Activator.CreateInstance(
externalCodeEvent,
_defaultConstructorParameters
);
return (assemblyContext, (T)instance);
}
这是完整的异常消息:
System.InvalidCastException:'无法将'Expriva.NewWorkflow.BPMN.ExecutionCodeTest.ExecutionContractTest'类型的对象转换为'Expriva.NewWorkflow.ExternalShared.Interfaces.IExecutionContract'类型。'
【问题讨论】:
-
如果你得到一个强制转换异常;返回的对象只是没有实现
T -
物体实现T,我要加一张照片
-
添加异常信息
-
异常表示
ExecutionContractTest没有实现IExecutionContract。请确保这样做。 -
我确定我发了一张照片,看看编辑后的问题
标签: c# .net .net-core .net-assembly .net-core-3.0