Вы боретесь с тем, что называется «Идентификацией типа», очень важной контрмерой ада DLL в .NET Framework.Тип не просто идентифицируется по имени пространства имен и имени типа, он также включает атрибуты сборки, из которой он взят.В частности, отображаемое имя сборки, [AssemblyVersion], [AssemblyCulture], PublicKeyToken и (косвенно) ProcessorArchitecture.Вы можете увидеть «настоящее» имя типа с помощью свойства Type.AssemblyQualifiedName.Например, класс System.String - System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
. Это не позволяет вам подделывать тип в другой сборке, если вы не можете присвоить этой сборке точно такие же атрибуты.Гораздо проще просто использовать существующую сборку, в вашем случае это не должно быть проблемой, поскольку вы используете только интерфейс.
Примечательно, что это требование несколько смягчено в .NET 4. Типы, которые были автоматически сгенерированы избиблиотека типов COM эквивалентна, если их имя и [Guid] совпадают.Это помогло устранить PIA и реализовать функцию «Вставить типы взаимодействия».Ничего, что относится к вашему делу.