コンパイラの警告 (レベル 1) C4691

'type' : 参照された型は参照されていないアセンブリ 'file' で必要です。現在の翻訳単位で定義された型が代わりに使用されます

元の型定義を含むメタデータ ファイルが参照されていないため、コンパイラはローカル型定義を使用しています。

file をリビルドしている場合、C4691 は無視することも、pragma warning を使用して無効にすることもできます。 つまり、ビルドしているファイルと、型定義の場所としてコンパイラが想定しているファイルが同じである場合、C4691 は無視できます。

ただし、メタデータで参照されているのと同じアセンブリのものではない定義をコンパイラで使用すると、予期しない動作が発生する可能性があります。CLR 型は、型の名前だけでなく、アセンブリによっても型指定されます。 つまり、アセンブリ z.dll の型 Z は、アセンブリ y.dll の型 Z とは異なります。

この例には、元の型定義が含まれています。

// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};

この例では C4691_a.dll を参照し、Original_Type 型のフィールドを宣言します。

// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
   Original_Type^ ot;
};

次の例では C4691 が生成されます。 この例には Original_Type の定義が含まれており、C4691a.dll を参照していないことに注意してください。

解決するには、元の型定義を含むメタデータ ファイルを参照し、ローカルの宣言と定義を削除します。

// C4691_c.cpp
// compile with: /clr /LD /W1
// C4691 expected

// Uncomment the following line to resolve.
// #using "C4691_a.dll"
#using "C4691_b.dll"

// Delete the following line to resolve.
ref class Original_Type;

public ref class MyClass : Client {};