.netmodule archivos como entrada del enlazador
link.exe acepta MSIL .obj
y.netmodule
como archivos de entrada. El archivo de salida generado por el enlazador es un ensamblado o un archivo .netmodule
sin ninguna dependencia en tiempo de ejecución de cualquier otro archivo .obj
o .netmodule
que se han introducido en el enlazador.
Comentarios
Los archivos .netmodule
se crean mediante el compilador de MSVC con /LN (Crear un módulo MSIL) o mediante el enlazador con /NOASSEMBLY (Crear un módulo MSIL). Los archivos .obj
siempre se crean en una compilación de Visual C++. Para otros compiladores de Visual Studio, use la opción /target:module del compilador.
El enlazador debe pasarse al archivo.obj
de la compilación de C++ que creó .netmodule
. Ya no se admite pasar .netmodule
porque las opciones del compilador /clr:pure y /clr:safe han quedado en desuso en Visual Studio 2015 y no se admiten en Visual Studio 2017 y versiones posteriores.
Para obtener información sobre cómo invocar el enlazador desde la línea de comandos, vea Sintaxis de la línea de comandos del enlazador y Uso del conjunto de herramientas de MSVC desde la línea de comandos.
Si se pasa al enlazador un archivo .netmodule
o .dll
que se compiló mediante el compilador de MSVC con /clr puede producirse un error. Para más información, vea Elección del formato de losnetmodule archivos de entrada.
El enlazador acepta los archivos nativos .obj
y los archivos MSIL .obj
compilados con /clr. Puede pasar los archivos mixtos .obj
a la misma compilación. La verificabilidad predeterminada del archivo de salida resultante es la misma que la del módulo de entrada más bajo.
Puede cambiar una aplicación compuesta por dos o más ensamblados que se incluya en solo un ensamblado. Vuelva a compilar los orígenes de los ensamblados y, a continuación, vincule los archivos .obj
o .netmodule
para generar un único ensamblado.
Debe especificar un punto de entrada mediante /ENTRY (Símbolo de punto de entrada) al crear una imagen ejecutable.
Al vincular con el archivo MSIL .obj
o.netmodule
, use /LTCG (Generación de código en tiempo de vínculo), en caso contrario, cuando el enlazador encuentre los archivos MSIL .obj
o.netmodule
, reiniciará el vínculo con /LTCG. Verá un mensaje informativo de que el vínculo se está reiniciando. Puede omitir este mensaje, pero para mejorar el rendimiento del enlazador, especifique explícitamente /LTCG.
Los archivos MSIL .obj
o.netmodule
también se pueden pasar a cl.exe.
Los archivos de entrada MSIL .obj
o.netmodule
no pueden tener recursos incrustados. Inserte los recursos en un módulo de salida o en un archivo de ensamblado mediante la opción del enlazador /ASSEMBLYRESOURCE (Insertar un recurso administrado). O bien, use la opción del compilador /resource en otros compiladores de Visual Studio.
Ejemplos
En el código de C++, se invocará el bloque catch
correspondiente a try
que invocará una no System
excepción. Sin embargo, de manera predeterminada, el CLR encapsula las que no son System
excepciones con RuntimeWrappedException. Cuando se crea un ensamblado desde módulos de C++ y distintos de éstos y quiere que se invoque un bloque catch
en el código de C++ desde su cláusula correspondiente try
cuando el bloque try
produce una excepción que no es del sistemaSystem
, debe agregar el atributo [assembly:System::Runtime::CompilerServices::RuntimeCompatibility(WrapNonExceptionThrows=false)]
al código fuente para los módulos que no son de C++.
// MSIL_linking.cpp
// compile with: /c /clr
value struct V {};
ref struct MCPP {
static void Test() {
try {
throw (gcnew V);
}
catch (V ^) {
System::Console::WriteLine("caught non System exception in C++ source code file");
}
}
};
/*
int main() {
MCPP::Test();
}
*/
Al cambiar el valor Boolean
del atributo WrapNonExceptionThrows
, modifica la capacidad del código Visual C++ de detectar una no excepción System
.
// MSIL_linking_2.cs
// compile with: /target:module /addmodule:MSIL_linking.obj
// post-build command: link /LTCG MSIL_linking.obj MSIL_linking_2.netmodule /entry:MLinkTest.Main /out:MSIL_linking_2.exe /subsystem:console
using System.Runtime.CompilerServices;
// enable non System exceptions
[assembly:RuntimeCompatibility(WrapNonExceptionThrows=false)]
class MLinkTest {
public static void Main() {
try {
MCPP.Test();
}
catch (RuntimeWrappedException) {
System.Console.WriteLine("caught a wrapped exception in C#");
}
}
}
caught non System exception in C++ source code file
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de