我们有一个旧的C/C++ .dll,已经进行了COM注册。我们的客户端有本地和.NET客户端,都使用这个.dll。
我们建立了一个新的.NET .dll来替换旧的.dll,即它们的COM接口是相同的。我们希望在不需要客户端重新编译或做任何事情的情况下替换旧的.dll。
对于本地客户端,只需注销旧的.dll并注册新的.dll(使用regasm)即可正常工作。对于一些.NET客户端也适用。然而,在这些情况下,当客户端和新的.dll都使用相同的.NET版本编译时,会抛出以下异常。
换句话说,以下内容是有效的:
这会抛出以下异常:
[A]BARAPIXLib.barcom5无法转换为[B]BARAPIXLib.barcom5。 类型A源自'BARAPIXLib,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null',位于位置C:\arkiv\S_BTW\BTW\BARAPIXWebService\Barapix\bin\BARAPIXLib.dll的上下文'LoadFrom'中。 类型B源自'BartrackTest,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null',位于位置'C:\arkiv\Bartrack\BartrackTest\x86\Src\BartrackTest\bin\x86\Release\BartrackTest.exe'的上下文'Default'中。如果您有任何想法,请告诉我。
我们建立了一个新的.NET .dll来替换旧的.dll,即它们的COM接口是相同的。我们希望在不需要客户端重新编译或做任何事情的情况下替换旧的.dll。
对于本地客户端,只需注销旧的.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,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null',位于位置C:\arkiv\S_BTW\BTW\BARAPIXWebService\Barapix\bin\BARAPIXLib.dll的上下文'LoadFrom'中。 类型B源自'BartrackTest,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null',位于位置'C:\arkiv\Bartrack\BartrackTest\x86\Src\BartrackTest\bin\x86\Release\BartrackTest.exe'的上下文'Default'中。如果您有任何想法,请告诉我。