Выбор формата входных файлов 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 из исходного кода).