嵌套在本机类型中的值类型的版本问题 (C++/CLI)

请考虑用于生成客户端程序集的签名(强名称)程序集组件。 此组件包含一个值类型,该值类型在客户端中用作本机联合、类或数组的成员的类型。 如果此组件的未来版本更改此值类型的大小或布局,则必须重新编译客户端。

使用 sn.exe (sn -k mykey.snk) 创建 keyfile。

示例

下面的示例为该组件。

// 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

tbc13stx.collapse_all(zh-cn,VS.110).gif注释

但是,如果向 nested_value_types.cpp 中的 struct S 添加另一个成员(例如 double d;),并且在不重新编译客户端的情况下重新编译组件,则结果为未经处理的异常(类型为 System.IO.FileLoadException)。

请参见

其他资源

托管类型 (C++/CLI)