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


Выбор формата входных файлов 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-файлы в качестве входных файлов компоновщика