选择 .netmodule 输入文件的格式

可以将 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 来引用这些文件。

See also

用作链接器输入的 .netmodule 文件