Sdílet prostřednictvím


Soubory .netmodule jako vstup linkeru

Link.exe nyní přijímá jazyk MSIL obj a .netmodules jako vstup.Ve výstupním souboru vytvořeném propojovacím programem bude sestavení nebo .netmodule se žádná závislost běhu na obj nebo .netmodules, že se jednalo o vstup do propojovacího programu.

.netmodules jsou vytvořeny pomocí kompilátoru Visual C++ s /LN (Vytvořit modul MSIL) nebo propojovací program s /NOASSEMBLY (Vytvořit modul MSIL). .objs jsou vždy vytvořeny při kompilaci aplikace Visual C++.Jinými kompilátory Visual Studio použít /target:module možnost kompilátoru.

Ve většině případů je nutné předat do propojovacího programu souboru obj z kompilace Visual C++, vytvořený .netmodule, pokud byl vytvořen .netmodule /clr (Common Language Runtime)..Netmodules jazyk MSIL použité jako vstup do propojovacího programu musí být čistý jazyk MSIL, které může být vyrobeno pomocí kompilátoru Visual C++ /clr:safe.Jinými kompilátory Visual Studio vytvoří ve výchozím nastavení modulů čistého jazyka MSIL.

Informace o vyvolání propojovací program z příkazového řádku naleznete v tématu Syntaxe příkazového řádku linkeru a Nastavení cesty a proměnných prostředí pro sestavení příkazového řádku.

Předávání .netmodule nebo .dll soubor propojovací program byl kompilován pomocí kompilátoru Visual C++ s /clr nebo /clr:pure může mít za následek chyby propojovacího programu.Další informace naleznete v tématu Výběr formátu vstupních souborů .netmodule.

Přijímá propojovací program nativní obj soubory stejně jako soubory obj MSIL zkompilovaný s /clr, /clr:pure, nebo /clr:safe.Při předávání .objs smíšené ve stejném sestavení, ověřitelnosti výsledného výstupního souboru, ve výchozím nastavení, bude rovna nejnižší úroveň ověřitelnosti vstupní moduly.Například pokud předáte do propojovacího programu bezpečný a čistý obj, výstupní soubor bude čisté./CLRIMAGETYPE (Zadat typ obrázku CLR)Umožňuje zadat nižší úroveň ověřitelnosti, pokud je to, co potřebujete.

Pokud chcete, aby aplikace, které mají být obsaženy v jednom sestavení aktuálně máte aplikaci, která se skládá ze dvou nebo více sestavení, musíte překompilovat sestavení a potom propojit .objs nebo .netmodules k vytvoření jediného sestavení.

Je nutné zadat bod vstupu pomocí /ENTRY (symbol vstupního bodu) při vytvoření spustitelné bitové kopie.

Při propojení se souborem jazyka MSIL obj nebo .netmodule pomocí /LTCG (vytváření kódu v době propojování), jinak pokud propojovací program zjistí jazyk MSIL obj nebo .netmodule, bude restartován propojení s/ltgc.

Soubory obj nebo .netmodule jazyk MSIL může být předán cl.exe.

Vstupní jazyk MSIL obj nebo .netmodule soubory nelze vložené prostředky.Prostředek je vložen do výstupního souboru (modul nebo sestavení) s /ASSEMBLYRESOURCE (integrovaný spravovaný zdroj) možností propojovacího programu nebo /resource možnost kompilátoru v jinými kompilátory Visual Studio.

Při provádění jazyka MSIL propojení, a pokud není také zadán /LTCG (vytváření kódu v době propojování), zobrazí se informační zpráva hlášení, že je restartování propojení.Tuto zprávu lze ignorovat, ale ke zlepšení výkonu propojovací program s MSIL propojení, explicitně zadat /LTCG.

Příklad

V kódu jazyka C++ bude vyvolána catch blok try odpovídající systém bez výjimky.Však ve výchozím nastavení, obtéká CLR systému bez výjimky s RuntimeWrappedException.Při sestavení je vytvořen z Visual C++ a Visual C++ bez modulů a chcete blok catch v kódu jazyka C++, které lze vyvolat pomocí jeho odpovídající try klauzule při bloku try výjimku mimo systém, je nutné přidat

[assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)] atribut pro moduly bez C++ zdrojový kód.

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

Změnou logickou hodnotu atributu WrapNonExceptionThrows úpravě kódu Visual C++ schopnost zachytit výjimky bez systému.

// 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#");
      }
   }
}
  

Viz také

Referenční dokumentace

Vstupní soubory LINK

Možnosti linkeru