Megosztás a következőn keresztül:


.netmodule fájlok csatolási bemenetként

link.exe bemenetként fogadja el az MSIL-.obj és .netmodule fájlokat. A csatoló által létrehozott kimeneti fájl egy szerelvény vagy egy .netmodule fájl, amely nem függ futásidejű függőséggel a csatolóhoz bevitt .obj vagy .netmodule fájloktól.

Megjegyzések

.netmodule fájlokat az MSVC fordító hozza létre /LN (MSIL modul létrehozása) vagy a /NOASSEMBLY (MSIL-modul létrehozása). .obj fájlok mindig C++ fordításban jönnek létre. Más Visual Studio-fordítók esetén használja a /target:module fordító lehetőséget.

A .netmodulelétrehozó C++ fordításból át kell adni a .obj fájlt. A .netmodule való továbbítás már nem támogatott, mert a /clr:pure és /clr:safe fordítóbeállítások elavultak a Visual Studio 2015-ben, és a Visual Studio 2017-ben és újabb verzióiban nem támogatottak.

A hivatkozás parancssorból való meghívásáról további információt Linker parancssori szintaxisa és Az MSVC-eszközkészlet használata a parancssorból.

Ha .netmodule vagy .dll fájlt ad át az MSVC fordítója által /clr lefordított hivatkozáskezelőnek, hivatkozáskezelő hibát okozhat. További információ: Formátum kiválasztása.netmodule bemeneti fájlok.

A linker a natív .obj fájlokat és az MSIL .obj/clrlefordított fájlokat is elfogadja. Vegyes .obj fájlokat is átadhat ugyanabban a buildben. Az eredményként kapott kimeneti fájl alapértelmezett ellenőrizhetősége megegyezik a legalacsonyabb bemeneti modul ellenőrizhetőségével.

Módosíthatja a két vagy több szerelvényből álló alkalmazásokat, hogy egy szerelvényben szerepeljenek. Hajtsa újra a szerelvények forrásait, majd kapcsolja össze a .obj fájlokat vagy .netmodule fájlokat egyetlen szerelvény létrehozásához.

Megadhat egy belépési pontot /ENTRY (Belépési pont szimbólum) használatával végrehajtható rendszerkép létrehozásakor.

Ha MSIL- vagy fájllal kapcsolódik, használja a /LTCG (Link-time code generation), ellenkező esetben, ha a hivatkozáskezelő az MSIL- vagy találkozik, újraindul a hivatkozás /LTCG. Megjelenik egy tájékoztató üzenet, amely szerint a hivatkozás újraindul. Ezt az üzenetet figyelmen kívül hagyhatja, de a linker teljesítményének javítása érdekében explicit módon adja meg /LTCG.

MSIL .obj vagy .netmodule fájlok is továbbíthatók cl.exe.

A bemeneti MSIL-.obj vagy .netmodule fájlok nem tartalmazhatnak beágyazott erőforrásokat. Erőforrások beágyazása kimeneti modulba vagy szerelvényfájlba a /ASSEMBLYRESOURCE (Felügyelt erőforrás beágyazása) linker beállítással. Vagy használja a /resource fordítót más Visual Studio-fordítókban.

Példák

A C++ kódban a megfelelő trycatch blokkja nemSystem kivétel esetén lesz meghívva. Alapértelmezés szerint azonban a CLR nemSystem kivételeket csomagol RuntimeWrappedException. Ha C++ és nem C++ modulból hoz létre szerelvényt, és azt szeretné, hogy a megfelelő try záradékból meghívjon egy C++ kódban lévő catch blokkot, amikor a try blokk nemSystem kivételt eredményez, hozzá kell adnia a [assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)] attribútumot a nem C++ modulok forráskódjába.

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

A WrapNonExceptionThrows attribútum Boolean értékének módosításával módosíthatja a C++ kód azon képességét, hogy nemSystem kivételt észleljen.

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

Lásd még: