可以将 MSIL .obj
文件(编译为 /clr
)作为 .netmodule
文件。
.obj
文件包含元数据和本机符号。
.netmodules
仅包含元数据。
使用/addmodule
编译器选项将 MSIL .obj
文件传递给任何其他 Visual Studio 编译器。 该文件 .obj
将成为生成的程序集的一部分,必须随程序集一起提供。 例如,Visual C# 和 Visual Basic 具有 /addmodule
编译器选项。
Note
在大多数情况下,需要通过创建 .net 模块的编译将文件传递给链接器 .obj
。 将 MSIL .dll
.netmodule
模块文件传递给链接器可能会导致LNK1107。
.obj
文件及其通过源中的 #include 引用的关联 .h
文件,允许C++应用程序使用模块中的本机类型。
.netmodule
在文件中,C++应用程序只能使用托管类型。 如果尝试将 .obj
文件传递给 #using,则有关本机类型的信息不可用。 而是 #include .obj
文件 .h
的文件。
其他 Visual Studio 编译器只能使用模块中的托管类型。
使用以下指南来确定是否需要将文件.netmodule
.obj
用作 MSVC 链接器模块输入:
如果要使用 Visual C++ 以外的 Visual Studio 编译器进行生成,请生成并
.netmodule
使用该.netmodule
链接器输入。如果使用 MSVC 编译器生成模块,并且模块用于生成库以外的内容,请使用
.obj
编译器生成的文件作为链接器模块输入。 请勿将.netmodule
文件用作输入。如果模块用于生成本机(而不是托管)库,请使用
.obj
文件作为链接器模块输入并生成.lib
库文件。如果模块用于生成托管库,并且链接器的所有模块输入都是可验证的(使用
/clr:safe
),请使用.obj
文件作为链接器模块输入并生成.dll
(程序集)或.netmodule
(模块)库文件。如果模块用于生成托管库,并且仅生成
/clr
链接器中的一个或多个模块输入,请使用.obj
文件作为链接器模块输入并生成.dll
(程序集)。 如果要从库公开托管类型,并且还希望C++应用程序使用库中的本机类型,则库包含.obj
库组件模块的文件。 你还希望为每个模块提供.h
文件,以便可以从源代码中通过 #include 来引用这些文件。