Consider a signed (strong name) assembly component used to build a client assembly. The component contains a value type that is used in the client as the type for a member of a native union, a class, or an array. If a future version of the component changes the size or layout of the value type, the client must be recompiled.
Create a keyfile with sn.exe (sn -k mykey.snk
).
Example
The following sample is the component.
В | Copy Code |
---|
// 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);
}
}; |
This sample is the client:
В | Copy Code |
---|
// 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 |
However, if you add another member to struct S
in nested_value_types.cpp, (for example, double d;
) and recompile the component without recompiling the client, the result is an unhandled exception (of type System.IO.FileLoadException).
See Also