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


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

Обновлен: Ноябрь 2007

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

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

0zyh2sf2.alert_note(ru-ru,VS.90).gifПримечание.

В большинстве случаев нужно будет передать в компоновщик OBJ-файл из компиляции, создавшей модуль .NET. Исключением является, если файл netmodule был создан с помощью /clr:pure. Передача DLL или файла модуля MSIL netmodule в компоновщик может вызвать ошибку 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-файлы в качестве входных файлов компоновщика