/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 \clrpredeterminado. 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 con initialAppDomain 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 /clrRestricciones.

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 /clrpuede 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). /MDgarantiza 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 _MANAGEDse define como 1. Para obtener más información, consulte Macros predefinidas.

Primero se inicializan las variables globales de un archivo objeto nativo (durante DllMainsi 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

  1. 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.

  2. Establezca la lista desplegable Configuración en Todas las configuraciones y el desplegable Plataforma en Todas las plataformas.

  3. Seleccione en la página Propiedades de configuración>C/C++>General.

  4. 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

Consulte también

Opciones del compilador de MSVC
Sintaxis de la línea de comandos del compilador MSVC