Tenemos un viejo C/C++ .dll que está COM registrado. Nuestros clientes tienen clientes nativos y .NET que usan este .dll..NET Client crasch cuando reemplaza COM .dll registrado por uno nuevo en la misma versión de .NET como cliente
Hemos creado un nuevo .NET .dll para reemplazar el antiguo, es decir, su interfaz COM es idéntica. Nos gustaría reemplazar el viejo .dll sin que nuestro cliente necesite recompilar o hacer algo a sus clientes.
Para clientes nativos, funciona bien simplemente anular el registro del antiguo .dll y registrar el nuevo (con regasm). También funciona para algunos clientes .NET. Sin embargo, en esos casos, tanto el cliente como el nuevo .dll se compilan con la misma versión .NET arroja la excepción a continuación.
En otras palabras, esto funciona:
.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
Esto arroja la excepcion a continuación:
.dll is .NET 4.0 -> client is .NET 4.0
.dll is .NET 3.5 -> client is .NET 3.5
[A] BARAPIXLib.barcom5 no pueden ser echados a [B] BARAPIXLib.barcom5.
El tipo A se origina de 'BARAPIXLib, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' en el contexto 'LoadFrom' en la ubicación C: \ arkiv \ S_BTW \ BTW \ BARAPIXWebService \ Barapix \ bin \ BARAPIXLib. dll '.
El tipo B se origina de 'BartrackTest, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' en el contexto 'Default' en la ubicación 'C: \ arkiv \ Bartrack \ BartrackTest \ x86 \ Src \ BartrackTest \ bin \ x86 \ Release \ BartrackTest.exe'. "}
sería apreciada cualquier idea.
¿Alguna posibilidad de que podamos ver la declaración de la referencia del método DLL así como algún código de llamada? – pickypg
¿Quiere decir cómo los clientes llaman a nuestro .dll? Eso es desconocido para nosotros, pero es probable que hayan hecho "Agregar referencia" en Visual Studio. Queremos reemplazar nuestro antiguo C/C++ COM .dll con un nuevo .NET sin que los clientes necesiten ser recompilados ni nada. Si esto es posible. – Poppert