Problémy s verzí u typů hodnot vnořených v nativních typech (C++/CLI)
Zvažte možnost použití podepsané (silný název) komponenty sestavení k vytvoření klientského sestavení.Komponenta obsahuje typ hodnoty, který je použit v klientovi jako typ pro člena nativní unie, třídy nebo pole.Pokud budoucí verze komponenty změní velikost nebo rozložení typu hodnoty, pak musí být klient znovu zkompilován.
Vytvořte klíčový soubor pomocí sn.exe (sn -k mykey.snk).
Příklad
Následující ukázka je komponenta:
// 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);
}
};
Tato ukázka je klient:
// 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();
}
Výsledek
S.i = 5
S.i = 6
S.i = 10
S.i = 11
Komentáře
Pokud přidáte jiný člen do struct S v nested_value_types.cpp (například double d;) a znovu zkompilujete komponentu bez znovu-zkompilování klienta, výsledkem je neošetřená výjimka (typu FileLoadException).