Проблемы версий, связанные с типами значений, вложенными в собственные типы (C++/CLI)
Рассмотрим подписанный с использованием строгого имени компонент, который используется для построения клиентской сборки.Этот компонент содержит тип значений, который используется в клиенте в качестве типа члена собственного объединения, класса или массива.Если в последующих версиях изменяется размер или структура типа значений, следует выполнить повторную компиляцию клиента.
Создайте файл ключа с помощью программы sn.exe (sn -k mykey.snk).
Пример
Ниже приведен пример компонента:
// 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);
}
};
В следующем примере описывается клиент:
// 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
Комментарии
Однако если в файле nested_value_types.cpp добавить другой член к структуре struct S (например double d;) и выполнить компиляцию компонента без повторной компиляции клиента, возникает необработанное исключение типа System.IO.FileLoadException.