Compartir a través de


Elegir el formato de los archivos de entrada .netmodule

Un archivo .obj de MSIL (compilado con /clr) también se puede usar como un archivo .netmodule. Los archivos .obj contienen los metadatos y los símbolos nativos. Los archivos .netmodules solo contienen metadatos.

Puede pasar un archivo .obj de MSIL a cualquier otro compilador de Visual Studio mediante la opción del compilador /addmodule (pero tenga en cuenta que el archivo .obj se convierte en parte del ensamblado resultante y debe enviarse con el ensamblado). Por ejemplo, Visual C# y Visual Basic tienen la opción del compilador /addmodule.

Nota:

La mayoría de las veces, deberá pasar al enlazador el archivo .obj desde la compilación que ha creado el módulo .net. Pasar un archivo de módulo MSIL de .dll o .netmodule al enlazador puede producir LNK1107.

Los archivos .obj, junto con sus archivos .h asociados, a los que se hace referencia a través de #include en el origen, permiten que las aplicaciones de C++ consuman los tipos nativos en el módulo. Por el contrario, en un archivo .netmodule solo se pueden consumir los tipos administrados por una aplicación de C++. Si intenta pasar un archivo .obj a #using, la información sobre los tipos nativos no estará disponible; #include el archivo .h del archivo .obj en su lugar.

Otros compiladores de Visual Studio solo pueden consumir los tipos administrados de un módulo.

Use lo siguiente para determinar si necesita usar un archivo .netmodule o un archivo .obj para la entrada del módulo en el enlazador de MSVC:

  • Si va a compilar con un compilador de Visual Studio distinto de Visual C++, genere un .netmodule y úselo como entrada para el enlazador.

  • Si usa el compilador de MSVC para generar módulos y si los módulos se usarán para compilar algo que no sea una biblioteca, use los archivos .obj generados por el compilador como entrada de módulo para el enlazador: no use el archivo .netmodule como entrada.

  • Si los módulos se van a usar para compilar una biblioteca nativa (no administrada), use los archivos .obj como entrada de módulo para el enlazador y genere un archivo de biblioteca .lib.

  • Si los módulos se usarán para compilar una biblioteca administrada y si toda la entrada del módulo para el enlazador será verificable (generada con /clr:safe), use los archivos .obj como entrada de módulo para el enlazador y genere un archivo de biblioteca de .dll (ensamblado) o .netmodule (módulo).

  • Si los módulos se usarán para compilar una biblioteca administrada y si se generará una o varias entradas de módulos en el enlazador con solo /clr, use los archivos .obj como entrada de módulo para el enlazador y genere un .dll (ensamblado). Si desea exponer los tipos administrados desde la biblioteca y, si también quiere que las aplicaciones de C++ consuman los tipos nativos de la biblioteca, la biblioteca constará de los archivos .obj de los módulos de los componentes de las bibliotecas (también querrá enviar los archivos .h de cada módulo, por lo que se puede hacer referencia a ellos con #include desde el código fuente).

Consulte también

Archivos .netmodule como entrada del vinculador