我试图加载一个程序集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);
}
Run Code Online (Sandbox Code Playgroud)
这是完整的异常消息:
System.InvalidCastException:“无法将类型为“Expriva.NewWorkflow.BPMN.ExecutionCodeTest.ExecutionContractTest”的对象转换为类型为“Expriva.NewWorkflow.ExternalShared.Interfaces.IExecutionContract”。”
下面的屏幕截图显示了该T实例的实现:
GitHub 上添加了一个示例存储库,以便更轻松地查看和测试问题所在。如果有一种方法可以透明地使用该类型(其他接口),无论它是否从 AssmemblyLoadContext 加载,那就太好了。
我正在使用 ML.NET,我想插入float32[N, 60, 1]作为输入(如图所示)。我不知道如何传递数据。我正在尝试这个课程:
public class OnnxInput
{
[ColumnName("lstm_input")]
public float lstm_input { get; set; }
}
var input = new OnnxInput[length][];
// Here I load the data into the input variable
var dataView = mlContext.Data.LoadFromEnumerable(input);
var pipeline = mlContext.Transforms.
ApplyOnnxModel(
modelFile: modelLocation,
inputColumnNames: new[] { TinyYoloModelSettings.ModelInput },
outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }
);
var model = pipeline.Fit(data);
Run Code Online (Sandbox Code Playgroud)
创建此矩阵时,当我尝试将数据放入管道时,出现错误:System.ArgumentOutOfRangeException: '无法确定 IDataView 类型并为成员 SyncRoot 注册自定义类型(参数'rawType')'
尝试使用另一种方法,使用此输入类:
public class OnnxInput
{
[ColumnName("lstm_input")]
public float[] lstm_input { get; set; } …Run Code Online (Sandbox Code Playgroud)