У нас есть старая C / C ++ .dll, которая зарегистрирована COM. У наших клиентов есть как нативные, так и .NET-клиенты, которые используют этот .dll.
Мы создали новый .NET .dll для замены старого, т. Е. Их интерфейс COM идентичен. Мы хотели бы заменить старую .dll без необходимости перекомпиляции или выполнения каких-либо действий для своих клиентов.
Для нативных клиентов нормально работает просто отменить регистрацию старого .dll и зарегистрировать новый (с помощью regasm). Это также работает для некоторых клиентов .NET. Однако в этих случаях и клиент, и новый .dll компилируются с одинаковой версией .NET, которая выдает исключение ниже.
Другими словами, это работает:
.dll is .NET 3.5 -> client is .NET 4.0
.dll is .NET 4.0 -> client is .NET 3.5
.dll is any .NET -> Client is native
Это исключение ниже:
.dll is .NET 4.0 -> client is .NET 4.0
.dll is .NET 3.5 -> client is .NET 3.5
[A] BARAPIXLib.barcom5 нельзя привести к [B] BARAPIXLib.barcom5.
Тип A происходит от «BARAPIXLib, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null» в контексте «LoadFrom» в расположении C: \ arkiv \ S_BTW \ BTW \ BARAPIXWebService \ Barapix \ bin \ BARAPIXLib.dll .
Тип B происходит от 'BartrackTest, Версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = null' в контексте 'По умолчанию' в расположении 'C: \ arkiv \ Bartrack \ BartrackTest \ x86 \ Src \ BartrackTest \ bin \ x86 \ Release \ BartrackTest.exe»."}
Любые идеи приветствуются.