Partager via


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

link.exe accepte MSIL .obj et .netmodule les fichiers comme entrée. Le fichier de sortie produit par l’éditeur de liens est un assembly ou un .netmodule fichier sans dépendance au moment de l’exécution sur les .obj fichiers ou .netmodule les fichiers qui ont été entrés dans l’éditeur de liens.

Notes

.netmodule les fichiers sont créés par le compilateur MSVC avec /LN (Créer un module MSIL) ou par l’éditeur de liens avec /NOASSEMBLY (Créer un module MSIL). .obj les fichiers sont toujours créés dans une compilation C++. Pour d’autres compilateurs Visual Studio, utilisez l’option de compilateur/target:module.

L’éditeur de liens doit être passé le .obj fichier à partir de la compilation C++ qui a créé le .netmodule. La transmission d’un fichier .netmodule n’est plus prise en charge, car les options /clr :pure et /clr :safe du compilateur sont déconseillées dans Visual Studio 2015 et non prises en charge dans Visual Studio 2017 et versions ultérieures.

Pour plus d’informations sur l’appel de l’éditeur de liens à partir de la ligne de commande, consultez la syntaxe de ligne de commande Éditeur de liens et utilisez l’ensemble d’outils MSVC à partir de la ligne de commande.

Le passage d’un ou .dll d’un .netmodule fichier à l’éditeur de liens compilé par le compilateur MSVC avec /clr peut entraîner une erreur d’éditeur de liens. Pour plus d’informations, consultez Choisir le format des fichiers d’entrée.netmodule

L’éditeur de liens accepte les fichiers natifs .obj et les fichiers MSIL .obj compilés avec /clr. Vous pouvez transmettre des fichiers mixtes .obj dans la même build. La verifiabilité par défaut du fichier de sortie résultante est identique à la verifiabilité du module d’entrée le plus bas.

Vous pouvez modifier une application composée de deux assemblys ou plus à contenir dans un assembly. Recompilez les sources des assemblys, puis liez les .obj fichiers ou .netmodule fichiers pour produire un seul assembly.

Spécifiez un point d’entrée à l’aide de /ENTRY (symbole de point d’entrée) lors de la création d’une image exécutable.

Lors de la liaison avec un fichier OU MSIL.obj, utilisez /LTCG (génération de code au moment du lien) ; sinon, lorsque l’éditeur de liens rencontre msIL .obj ou .netmodule, il redémarre le lien avec /LTCG..netmodule Vous verrez un message d’information indiquant que le lien redémarre. Vous pouvez ignorer ce message, mais pour améliorer les performances de l’éditeur de liens, spécifiez explicitement /LTCG.

MSIL .obj ou .netmodule les fichiers peuvent également être passés à cl.exe.

MsIL .obj d’entrée ou .netmodule les fichiers ne peuvent pas avoir de ressources incorporées. Incorporer des ressources dans un module de sortie ou un fichier d’assembly à l’aide de l’option de l’éditeur de liens /ASSEMBLYRESOURCE (Incorporer une ressource managée). Vous pouvez également utiliser l’option /resource compiler dans d’autres compilateurs Visual Studio.

Exemples

Dans le code C++, le catch bloc d’un correspondant try est appelé pour une exception non-exceptionSystem . Toutefois, par défaut, l’encapsule CLR les exceptions non-exceptionsSystem avec RuntimeWrappedException. Lorsqu’un assembly est créé à partir de modules C++ et non-C++, et que vous souhaitez qu’un catch bloc dans le code C++ soit appelé à partir de sa clause correspondante try lorsque le try bloc lève une exception non-System , vous devez ajouter l’attribut [assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)] au code source pour les modules non-C++.

// MSIL_linking.cpp
// compile with: /c /clr
value struct V {};

ref struct MCPP {
   static void Test() {
      try {
         throw (gcnew V);
      }
      catch (V ^) {
         System::Console::WriteLine("caught non System exception in C++ source code file");
      }
   }
};

/*
int main() {
   MCPP::Test();
}
*/

En modifiant la Boolean valeur de l’attribut WrapNonExceptionThrows , vous modifiez la capacité du code C++ à intercepter une exception nonSystem - .

// MSIL_linking_2.cs
// compile with: /target:module /addmodule:MSIL_linking.obj
// post-build command: link /LTCG MSIL_linking.obj MSIL_linking_2.netmodule /entry:MLinkTest.Main /out:MSIL_linking_2.exe /subsystem:console
using System.Runtime.CompilerServices;

// enable non System exceptions
[assembly:RuntimeCompatibility(WrapNonExceptionThrows=false)]

class MLinkTest {
   public static void Main() {
      try {
         MCPP.Test();
      }
      catch (RuntimeWrappedException) {
         System.Console.WriteLine("caught a wrapped exception in C#");
      }
   }
}
caught non System exception in C++ source code file

Voir aussi