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.