Just because 2 types share the same name don't make them the same type. The runtime uses the fully qualified name which includes the assembly so if you have type A in assembly A and you copy that type verbatim to assembly B and then load both A.A and B.A are 2 completely different types and are not interchangeable. This is by design. The only real way to make 2 different types look the same is to use an interface that they both implement.
Given your question is about taking something from MS and getting it to work in a third party library I would recommend you post your question over in the library's Github page. They better understand how their library works and what you might be able to do to get this to work, if it is possible.