Partager via


Choix du format des fichiers d'entrée .netmodule

Un fichier MSIL .obj (compilé avec /clr) peut également être utilisé comme fichier .netmodule. .obj fichiers contiennent des métadonnées et des symboles natifs. .netmodules contiennent uniquement des métadonnées.

Vous pouvez transmettre un fichier MSIL .obj à n’importe quel autre compilateur Visual Studio via l’option du compilateur /addmodule (mais sachez que le fichier .obj fait partie de l’assembly résultant et doit être livré avec l’assembly). Par exemple, Visual C# et Visual Basic ont l’option du compilateur /addmodule.

Remarque

Dans la plupart des cas, vous devez passer à l’éditeur de liens le fichier .obj à partir de la compilation qui a créé le module .net. Le passage d’un fichier de module MSIL .dll ou .netmodule à l’éditeur de liens peut entraîner LNK1107.

.obj fichiers, ainsi que leurs fichiers .h associés, que vous référencez via #include dans la source, autorisent les applications C++ à consommer les types natifs dans le module, tandis que dans un fichier .netmodule, seuls les types managés peuvent être consommés par une application C++. Si vous tentez de transmettre un fichier .obj à #using, les informations sur les types natifs ne seront pas disponibles ; #include le fichier .h du fichier .obj à la place.

D’autres compilateurs Visual Studio peuvent uniquement utiliser des types managés à partir d’un module.

Utilisez ce qui suit pour déterminer si vous devez utiliser un fichier .netmodule ou un fichier .obj comme entrée de module dans l’éditeur de liens MSVC :

  • Si vous générez avec un compilateur Visual Studio autre que Visual C++, produisez un .netmodule et utilisez .netmodule comme entrée pour l’éditeur de liens.

  • Si vous utilisez le compilateur MSVC pour produire des modules et si le ou les modules seront utilisés pour générer quelque chose d’autre qu’une bibliothèque, utilisez les fichiers .obj générés par le compilateur comme entrée de module pour l’éditeur de liens ; n’utilisez pas le fichier .netmodule comme entrée.

  • Si vos modules seront utilisés pour générer une bibliothèque native (et non gérée), utilisez .obj fichiers en tant qu’entrée de module pour l’éditeur de liens et générez un fichier de bibliothèque .lib.

  • Si vos modules seront utilisés pour générer une bibliothèque managée et si toutes les entrées de module à l’éditeur de liens seront vérifiables (produites avec /clr :safe), utilisez .obj fichiers comme entrée de module pour l’éditeur de liens et générez un fichier de bibliothèque .dll (assembly) ou .netmodule (module).

  • Si vos modules seront utilisés pour générer une bibliothèque managée et si une ou plusieurs entrées de modules à l’éditeur de liens seront produites avec juste /clr, utilisez .obj fichiers comme entrée de module pour l’éditeur de liens et générez un .dll (assembly). Si vous souhaitez exposer des types managés à partir de la bibliothèque et si vous souhaitez également que les applications C++ consomment les types natifs dans la bibliothèque, votre bibliothèque se compose des fichiers .obj pour les modules de composant bibliothèques (vous souhaiterez également expédier les fichiers .h pour chaque module, afin qu’elles puissent être référencées avec #include à partir du code source).

Voir aussi

Fichiers .netmodule en tant qu’entrée de l’Éditeur de liens