Я выделил следующую проблему, которую я использую для распределенного измерения и интерпретации данных (когда impl знает, как обрабатывать данные и их UserControl, которого нет в примере, который представляет их).
У меня есть 3 различных проекта в решении: 1) интерфейс (отдельная dll)
namespace inter
{
public interface IInter
{
byte[] results();
}
}
2) реализующая класс (отдельная dll)
using inter;
namespace impl
{
public class impl : IInter
{
public byte[] results()
{//dummy data production
return new byte[10].Select((ii, index) => (byte)index).ToArray();
}
}
}
3) программа, которая запускает проблему ...
using inter;
using impl;
namespace test_class_casting
{
class Program
{
static void Main(string[] args)
{
var path = @"C:\Users\pavel\source\repos\test class casting\impl\bin\Debug\impl.dll";
var b = File.ReadAllBytes(path);
var assembly = Assembly.Load(b);
IInter inst = null;
var expTypes = assembly.GetExportedTypes();
foreach (var d in assembly.GetExportedTypes())
{
var obj = Activator.CreateInstance(d);
if (obj is IInter)
{
inst = obj as IInter;
try
{
var res = inst.results();
continue;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
Environment.Exit(0);
}
}
}
try
{
var reType = (impl.impl)inst;// as impl.impl;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadKey();
Environment.Exit(0);
}
Console.WriteLine("...");
Console.ReadKey();
}
}
}
Проблема в том, что приведение типа reType завершится неудачно, поскольку [A] impl.impl не может быть приведен к [B] impl.impl. сообщению об исключении. Как сделать так, чтобы скрипт распознал, что оба типа классов совпадают. (Примечание. Я не могу связать ссылку с проектом, ответственность за реализацию классов impl несут пользователи, так что я даже не знаю их всех.
Я пытался даже добавить Сильные имена как к inter, так и к impl, но уже с прогрессом. У вас есть решение для этого?