Wybieranie formatu plików wejściowych .netmodule
Plik .obj MSIL (skompilowany za pomocą /clr) może być również używany jako plik .netmodule. .obj pliki zawierają metadane i symbole natywne. Moduły .netmodules zawierają tylko metadane.
Plik .obj MSIL można przekazać do dowolnego innego kompilatora programu Visual Studio za pośrednictwem opcji kompilatora /addmodule (ale należy pamiętać, że plik .obj staje się częścią wynikowego zestawu i musi zostać dostarczony z zestawem). Na przykład język Visual C# i Visual Basic mają opcję kompilatora /addmodule.
Uwaga
W większości przypadków należy przekazać do konsolidatora plik .obj z kompilacji, która utworzyła moduł .net. Przekazanie pliku modułu .dll lub .netmodule MSIL do konsolidatora może spowodować LNK1107.
.obj plików wraz ze skojarzonymi plikami .h, do których odwołujesz się za pośrednictwem #include w źródle, zezwól aplikacjom języka C++ na korzystanie z typów natywnych w module, natomiast w pliku .netmodule tylko typy zarządzane mogą być używane przez aplikację języka C++. Jeśli spróbujesz przekazać plik .obj do #using, informacje o typach natywnych nie będą dostępne; #include zamiast tego plik h pliku .obj.
Inne kompilatory programu Visual Studio mogą korzystać tylko z typów zarządzanych z modułu.
Użyj poniższych instrukcji, aby określić, czy należy użyć modułu .netmodule, czy pliku .obj jako danych wejściowych modułu do konsolidatora MSVC:
Jeśli kompilujesz za pomocą kompilatora programu Visual Studio innego niż Visual C++, utwórz moduł .netmodule i użyj polecenia .netmodule jako danych wejściowych konsolidatora.
Jeśli używasz kompilatora MSVC do tworzenia modułów i jeśli moduły będą używane do kompilowania czegoś innego niż biblioteka, użyj plików .obj utworzonych przez kompilator jako dane wejściowe modułu do konsolidatora; nie należy używać pliku .netmodule jako danych wejściowych.
Jeśli moduły będą używane do tworzenia natywnej (nie zarządzanej) biblioteki, użyj .obj plików jako danych wejściowych modułu do konsolidatora i wygeneruj plik biblioteki .lib.
Jeśli moduły będą używane do tworzenia biblioteki zarządzanej, a wszystkie dane wejściowe modułu do konsolidatora będą weryfikowalne (generowane za pomocą /clr:safe), użyj .obj plików jako danych wejściowych modułu do konsolidatora i wygeneruj plik biblioteki .dll (zestaw) lub .netmodule (module).
Jeśli moduły będą używane do tworzenia biblioteki zarządzanej, a jeśli co najmniej jeden moduł wejściowy konsolidatora zostanie utworzony za pomocą polecenia tylko /clr, użyj .obj plików jako danych wejściowych modułu do konsolidatora i wygeneruj .dll (zestaw). Jeśli chcesz uwidocznić typy zarządzane z biblioteki i jeśli chcesz również, aby aplikacje języka C++ mogły korzystać z typów natywnych w bibliotece, biblioteka będzie składać się z plików .obj dla modułów składników bibliotek (należy również wysłać pliki h dla każdego modułu, aby można było się do nich odwoływać z #include z kodu źródłowego).