Problemas de versão para tipos de valor aninhados em tipos nativos (C + + / CLI)

Considere um componente de assembly assinado (nome forte) usado para criar um assembly de cliente.O componente contém um tipo de valor usado no cliente como o tipo de membro de uma união nativa, uma classe ou uma matriz.Se uma versão futura do componente altera o tamanho ou o layout do tipo de valor, o cliente deve ser recompilado.

Criar um keyfile com sn (sn -k mykey.snk).

Exemplo

O exemplo a seguir é o componente.

// nested_value_types.cpp
// compile with: /clr /LD
using namespace System::Reflection;
[assembly:AssemblyVersion("1.0.0.*"), 
assembly:AssemblyKeyFile("mykey.snk")];

public value struct S {
   int i;
   void Test() {
      System::Console::WriteLine("S.i = {0}", i);
   }
};

Esse exemplo é o cliente:

// nested_value_types_2.cpp
// compile with: /clr
#using <nested_value_types.dll>

struct S2 {
   S MyS1, MyS2;
};

int main() {
   S2 MyS2a, MyS2b;
   MyS2a.MyS1.i = 5;
   MyS2a.MyS2.i = 6;
   MyS2b.MyS1.i = 10;
   MyS2b.MyS2.i = 11;

   MyS2a.MyS1.Test();
   MyS2a.MyS2.Test();
   MyS2b.MyS1.Test();
   MyS2b.MyS2.Test();
}

Saída

S.i = 5
S.i = 6
S.i = 10
S.i = 11

tbc13stx.collapse_all(pt-br,VS.110).gifComentários

No entanto, se você adicionar outro membro para struct S em nested_value_types.cpp, (por exemplo, double d;) e recompilar o componente sem recompilar o cliente, o resultado é uma exceção não tratada (do tipo System.IO.FileLoadException).

Consulte também

Outros recursos

Tipos gerenciados (C + + / CLI)