Condividi tramite


Problemi di versione per tipi di valore nidificati in tipi nativi

Aggiornamento: novembre 2007

Si consideri un componente assembly firmato con nome sicuro che viene utilizzato per generare un assembly client. Tale componente contiene un tipo di valore che viene utilizzato nel client come tipo per un membro di una classe, una matrice o un'unione nativa. Se in una versione successiva del componente viene modificato il layout o la dimensione del tipo di valore, sarà necessario ricompilare il client.

Creare un file di chiave con sn.exe (sn -k mykey.snk).

Esempio

Nell'esempio riportato di seguito viene illustrato il 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);
   }
};

Nell'esempio riportato di seguito viene illustrato il client:

// 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();
}

Output

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

Commenti

Se tuttavia si aggiunge un altro membro a struct S in nested_value_types.cpp, ad esempio double d;, e si ricompila il componente senza ricompilare il client, verrà generata un'eccezione non gestita di tipo System.IO.FileLoadException.

Vedere anche

Altre risorse

Tipi gestiti