Problemas de versión con tipos de valor anidados en tipos nativos

Actualización: noviembre 2007

Considere un componente de ensamblado firmado (nombre seguro) que se utiliza para generar un ensamblado de cliente. El componente contiene un tipo de valor que se usa en el cliente como tipo para un miembro de una unión nativa, una clase o una matriz. Si una versión futura del componente cambia el tamaño o el diseño del tipo de valor, se debe volver a compilar el cliente.

Cree un archivo de claves con sn.exe (sn -k mykey.snk).

Ejemplo

El ejemplo siguiente es el 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);
   }
};

Este ejemplo es el 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();
}

Resultado

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

Comentarios

No obstante, si agrega otro miembro a struct S en nested_value_types.cpp, (por ejemplo, double d;) y vuelve a compilar el componente sin compilar de nuevo el cliente, el resultado es una excepción no controlada (de tipo System.IO.FileLoadException).

Vea también

Otros recursos

Tipos administrados