Sdílet prostřednictvím


Problémy s verzí pro vnořené typy hodnot v nativních typech

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 System.IO.FileLoadException).

Viz také

Další zdroje

Spravované typy