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


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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

См. также

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