Sdílet prostřednictvím


.netmodule soubory jako vstup Linker

soubor Link.exe nyní přijímá MSIL obj a.netmodules jako vstup.Výstupní soubor vytvořeném propojovacím programem bude sestavení nebo.netmodule se žádné závislostí spuštění na libovolné obj nebo.netmodules, že byly na vytvořeném propojovacím vstup.

.vytváří kompilátor Visual C++ s netmodules /LN (vytvořit modul MSIL) nebo linker s / NOASSEMBLY (vytvořit modul MSIL)..objs jsou vždy vytvořeny v sestavování Visual C++.Ostatní kompilátory Visual Studio použít /target:module volba kompilátoru.

Ve většině případů je nutné předat vytvořeném propojovacím obj soubor z kompilace Visual C++, který vytvořili.netmodule, pokud.byl vytvořen netmodule /CLR (kompilace společné Language Runtime).MSIL.použité jako vstup do vytvořeném propojovacím musí být čisté MSIL, které mohou být vyrobeny pomocí kompilátoru Visual C++ netmodules /clr:safe.Ostatní kompilátory Visual Studio vyrábět čistého MSIL moduly ve výchozím nastavení.

Informace jak vyvolat linker z příkazového řádku naleznete v tématu Propojovač syntaxi příkazového řádku a Nastavení cesty a proměnné prostředí pro sestavení příkazového řádku.

Předáním.soubor netmodule nebo DLL linker, který byl kompilován pomocí kompilátoru Visual C++ s /clr nebo s /clr:pure může způsobit chybu linker.Další informace naleznete v tématu Volba vstupní soubory ve formátu .netmodule.

Přijímá vytvořeném propojovacím obj nativní soubory i soubory obj MSIL kompilována s /clr, /clr:pure, nebo /clr:safe.Při předávání smíšené .objs ve stejném sestavení, verifiability výsledný výstupní soubor, standardně bude rovna nejnižší úroveň verifiability vstupní moduly.Například Pokud předáte vytvořeném propojovacím obj bezpečné a čisté, výstupní soubor bude čistý./ CLRIMAGETYPE (určete typ CLR obrazu)Umožňuje zadat nižší verifiability, pokud je to, co potřebujete.

Pokud již máte aplikaci, která se skládá ze dvou nebo více sestavení a chcete být obsaženy v jednom sestavení aplikace, je nutné překompilovat sestavení a propojit .objs nebo.netmodules k výrobě jednoho sestavení.

Je nutné zadat bod položky pomocí VSTUP (Symbol vstupní bod) při vytváření spustitelné bitové kopie.

Při propojení s MSIL obj nebo.použití souboru netmodule / LTCG (kód odkazu generace), když narazí linker MSIL obj nebo.netmodule, bude restartován propojení s /LTCG.

MSIL obj nebo.netmodule soubory mohou být také předány do cl.exe.

Vstupní MSIL obj nebo.netmodule soubory nelze vložené prostředky.Prostředek je vložený v souboru výstupu (modul nebo sestavení) s / ASSEMBLYRESOURCE (Vložit spravovaného prostředku) možnost linker nebo /resource volba kompilátoru v jiných kompilátorů Visual Studio.

Při provádění MSIL propojení a také nezadáte / LTCG (kód odkazu generace), zobrazí se informační zpráva hlášení, že odkaz je restartování.Tuto zprávu můžete ignorovat, ale chcete zlepšit výkon linker s MSIL propojení, explicitně zadat /LTCG.

Příklad

V kódu jazyka C++ bude vyvolána bloku catch odpovídající akci systému bez výjimky.Však standardně CLR obtéká 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++ vyvolána z jeho odpovídající klauzule try bloku try vygeneruje výjimku mimo systém, je nutné přidat

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

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

Logická hodnota atributu WrapNonExceptionThrows změnou úpravě kódu jazyka Visual C++ schopnost zachytit výjimku mimo systém.

// 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

PROPOJENÍ vstupní soubory

Možnosti Linker