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


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

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

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

Примечание

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

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

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

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

  • При построении с компилятором Visual Studio, отличных от Visual C++ .netmodule .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-файлы в качестве входных файлов компоновщика