/clr
(Compilación de Common Language Runtime)
Permite a las aplicaciones y los componentes usar las características de Common Language Runtime (CLR) y habilita la compilación de C++/CLI.
Sintaxis
/clr
[:
opciones]
Argumentos
options
Uno o más de los siguientes argumentos separados por comas.
None
Sin opciones,
/clr
crea los metadatos para el componente. Los metadatos pueden usarlos otras aplicaciones de CLR y permiten que el componente use tipos y datos en los metadatos de otros componentes de CLR. Para más información, vea Ensamblados mixtos (nativos y administrados).
netcore
Disponible a partir de la versión 16.4 de Visual Studio 2019,
/clr:netcore
crea los metadatos y el código para el componente mediante la versión más reciente de .NET Framework multiplataforma, también conocida como .NET Core. Otras aplicaciones de .NET Core pueden consumir los metadatos. Además, la opción permite al componente consumir los tipos y datos en los metadatos de otros componentes de .NET Core.
nostdlib
Indica al compilador que omita el directorio
\clr
predeterminado. El compilador genera errores si se incluyen varias versiones de una DLL, como System.dll. Esta opción le permite especificar el marco concreto que se usará durante la compilación.pure
/clr:pure
está en desuso. Esta opción se ha quitado de Visual Studio 2017 y versiones posteriores. Se recomienda trasladar el código que deba ser MSIL puro a C#.safe
/clr:safe
está en desuso. Esta opción se ha quitado de Visual Studio 2017 y versiones posteriores. Se recomienda trasladar a C# el código de puerto que deba ser seguro para MSIL.noAssembly
/clr:noAssembly
está en desuso. Use/LN
(Crear módulo MSIL) en su lugar.Indica al compilador que no inserte un manifiesto del ensamblado en el archivo de salida. De forma predeterminada, la opción
noAssembly
no está en vigor.Un programa administrado que no tiene los metadatos de ensamblado en el manifiesto se le conoce como módulo. La opción
noAssembly
solo puede usarse para generar un módulo. Si compila con/c
y/clr:noAssembly
, especifique la opción/NOASSEMBLY
en la fase del enlazador para crear un módulo.Antes de Visual Studio 2005,
/clr:noAssembly
se requiere/LD
./LD
está ahora implícita cuando se especifica/clr:noAssembly
.initialAppDomain
initialAppDomain
está obsoleto. Habilita una aplicación C++/CLI para que se ejecute en la versión 1 del CLR. Una aplicación que se compila coninitialAppDomain
no se debe usar en una aplicación que usa ASP.NET porque no se admite en la versión 1 de CLR.
Comentarios
Código administrado es el código se puede inspeccionar y administrar con el CLR. El código administrado puede tener acceso a los objetos administrados. Para más información, vea /clr
Restricciones.
Para obtener información sobre cómo desarrollar aplicaciones que definan y usen tipos administrados en C++, consulte Extensiones de componentes para plataformas en tiempo de ejecución.
Una aplicación compilada mediante /clr
puede contener o no datos administrados.
Para habilitar la depuración en una aplicación administrada, vea /ASSEMBLYDEBUG
(Agregar DebuggableAttribute).
Solo se crearán las instancias de tipos CLR en el montón de recolección de elementos no utilizados. Para más información, vea ref class and ref struct (C++/CLI and C++/CX) [ref class y ref struct (C++/CLI y C++/CX)]. Para compilar una función en código nativo, use la pragma unmanaged
. Para más información, vea managed
, unmanaged
.
De manera predeterminada, /clr
no está en vigor. Cuando /clr
está en vigor, también lo está /MD
. Para obtener más información, vea /MD
, /MT
, /LD
(Usar Biblioteca en tiempo de ejecución). /MD
garantiza que las versiones con subprocesamiento múltiple vinculadas dinámicamente de las rutinas en tiempo de ejecución se seleccionan en los archivos de encabezado estándar. El subprocesamiento múltiple es necesario para la programación administrada porque el recolector de elementos no utilizados de CLR ejecuta los finalizadores en un subproceso auxiliar.
Si compila con /c
, puede especificar el tipo CLR del archivo de salida resultante con la opción del enlazador /CLRIMAGETYPE
.
/clr
implica /EHa
y no se admite /EH
ninguna otra opción para /clr
. Para más información, consulte /EH
(Modelo de control de excepciones).
Para más información sobre cómo determinar el tipo de imagen de CLR de un archivo, consulte /CLRHEADER
.
Todos los módulos que se pasen a una invocación específica del enlazador tienen que haberse compilado con la misma opción de compilador de la biblioteca en tiempo de ejecución (/MD
o /LD
).
Use la opción de enlazador /ASSEMBLYRESOURCE
para insertar un recurso en un ensamblado. Las opciones del enlazador/DELAYSIGN
, /KEYCONTAINER
y /KEYFILE
también le permiten personalizar cómo se crea un ensamblado.
Cuando se usa /clr
,el símbolo _MANAGED
se define como 1. Para obtener más información, consulte Macros predefinidas.
Primero se inicializan las variables globales de un archivo objeto nativo (durante DllMain
si el ejecutable es un archivo DLL) y luego las variables globales de la sección administrada (antes de que se ejecute cualquier código administrado). #pragma init_seg
solo afecta al orden de inicialización en las categorías administradas y no administradas.
Metadatos y clases sin nombre
Las clases sin nombre aparecen en los metadatos con nombres como $UnnamedClass$<crc-of-current-file-name>$<index>$
, en el que <index>
es una cuenta secuencial de las clases sin nombre en la compilación. Por ejemplo, el siguiente ejemplo de código genera una clase sin nombre en los metadatos.
// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;
Use ildasm.exe para ver los metadatos.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Establezca la lista desplegable Configuración en Todas las configuraciones y el desplegable Plataforma en Todas las plataformas.
Seleccione en la página Propiedades de configuración>C/C++>General.
Modifique la propiedad Compatible con Common Language Runtime. Elija Aceptar para guardar los cambios.
Nota:
En el IDE de Visual Studio, la opción del compilador /clr
se puede establecer individualmente en la páginaConfiguración de propiedades> C/C++>General del cuadro de diálogo las páginas de propiedades. Sin embargo, se recomienda usar una plantilla CLR para crear el proyecto. Establece todas las propiedades necesarias para crear correctamente un componente CLR. Otra manera de establecer estas propiedades es usar la propiedad Compatible con Common Language Runtime en la página Configuración de propiedades>Avanzadas del cuadro de diálogo las páginas de propiedades. Esta propiedad establece todas las otras opciones de herramientas relacionadas con CLR a la vez.
Para establecer esta opción del compilador mediante programación
- Vea CompileAsManaged.
Consulte también
Opciones del compilador de MSVC
Sintaxis de la línea de comandos del compilador MSVC