次の方法で共有


ネイティブ型に入れ子になっている値型のバージョンの問題

更新 : 2007 年 11 月

クライアント アセンブリをビルドするために使用される署名済みの (厳密な名前) アセンブリ コンポーネントを考えます。このコンポーネントには、クライアントでネイティブ共用体、クラス、または配列のメンバの型として使用される値型が含まれています。将来のバージョンのコンポーネントで値型のサイズまたはレイアウトが変更された場合は、クライアントを再コンパイルする必要があります。

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();
}

出力

S.i = 5
S.i = 6
S.i = 10
S.i = 11

コメント

しかし、nested_value_types.cpp で struct S に別のメンバ (たとえば double d;) を追加し、クライアントを再コンパイルせずにコンポーネントを再コンパイルすると、(System.IO.FileLoadException 型の) 処理できない例外が発生します。

参照

その他の技術情報

マネージ型