Поделиться через


Выбор формата входных файлов netmodule

OBJ-файл языка MSIL (скомпилированный с помощью /clr) можно использовать также как NETMODULE- файл. OBJ-файлы содержат метаданные и собственные символы. . NETMODULE-файлы содержат только метаданные.

OBJ-файл языка MSIL можно передать в любой другой компилятор Visual Studio с помощью параметра компилятора /addmodule (однако следует знать, что OBJ-файл становится частью итоговой сборки и должен поставляться со сборкой). Например, параметр компилятора /addmodule имеется в Visual C# и Visual Basic.

Примечание

В большинстве случаев нужно будет передать в компоновщик OBJ-файл из компиляции, создавшей модуль .NET.Исключением является, если NETMODULE-файл был создан с помощью /clr:pure.Передача DLL- илиNETMODULE-файла MSIL в компоновщик может вызвать ошибку LNK1107.

OBJ-файлы со связанными с ними H-файлами, ссылка с которыми устанавливается с помощью директивы #include в источнике, разрешают приложениям C++ использовать собственные типы в модулях, тогда как в NETMODULE- файле приложение C++ может использовать только управляемые типы. При попытке передачи OBJ-файла в #using сведения о собственных типах будут недоступны; вместо этого используйте #include для H-файла OBJ-файла.

Другие компиляторы Visual Studio могут использовать только управляемые типы из модуля.

Используйте следующие рекомендации, чтобы определить, какой файл — NETMODULE или OBJ — нужно использовать в качестве входного модуля для компоновщика C++:

  • Если построение выполняется с помощью компилятора Visual Studio, отличного от Visual C++, создайте NETMODULE- файл и используйте его в качестве входного модуля для компоновщика.

  • Если для создания модулей используется компилятор Visual C++, и если модули будут использоваться для построения каких-либо других компонентов кроме библиотеки, используйте OBJ-файлы, созданные компилятором, в качестве входного модуля для компоновщика и не используйте для этого NETMODULE- файл.

  • Если модули будут использоваться для построения собственной (неуправляемой) библиотеки, используйте OBJ-файлы в качестве входного модуля в компоновщик и сгенерируйте файл библиотеки LIB.

  • Если модули будут использоваться для построения управляемой библиотеки, и если все входные модули для компоновщика будут проверяемыми (созданными с помощью /clr:safe), используйте OBJ-файлы в качестве входного модуля для компоновщика и создайте DLL (сборку) или файл библиотеки (модуль) NETMODULE.

  • Если модули будут использоваться для построения управляемой библиотеки, и если все входные модули для компоновщика будут созданы с помощью /clr:pure или /clr:safe, используйте OBJ-файлы в качестве входного модуля для компоновщика и создайте DLL (сборку) или NETMODULE (модуль), если нужно только предоставить управляемые типы из библиотеки. Если нужно предоставить управляемые типы из библиотеки, а также требуется, чтобы приложения C++ использовали собственные типы в библиотеке, библиотека будет состоять из OBJ-файлов для модулей компонентов библиотек (также потребуется поставлять H-файлы для каждого модуля, чтобы для них можно было добавить ссылку с помощью #include из исходного кода).

  • Если модули будут использоваться для построения управляемой библиотеки, и если один или несколько входных модулей в компоновщик будут созданы с помощью только /clr, используйте OBJ-файлы в качестве входного модуля в компоновщик и сгенерируйте DLL (сборку). Если нужно предоставить управляемые типы из библиотеки, а также требуется, чтобы приложения C++ использовали собственные типы в библиотеке, библиотека будет состоять из OBJ-файлов для модулей компонентов библиотек (также потребуется поставлять H-файлы для каждого модуля, чтобы для них можно было добавить ссылку с помощью #include из исходного кода).

См. также

Ссылки

.NETMODULE-файлы в качестве входных файлов компоновщика