/clr (Compilación de Common Language Runtime)/clr (Common Language Runtime Compilation)

Permite que las aplicaciones y los componentes usen las características de Common Language Runtime (CLR) y habilita la compilación de C++/CLI.Enables applications and components to use features from the common language runtime (CLR) and enables C++/CLI compilation.

SintaxisSyntax

/clr[:Opciones ]/clr[:options ]

ArgumentosArguments

Opcionesoptions
Uno o varios de los siguientes argumentos separados por comas.One or more of the following comma-separated arguments.

  • ningunonone

    Sin opciones, /clr crea metadatos para el componente.With no options, /clr creates metadata for the component. Los metadatos pueden ser consumidos por otras aplicaciones CLR y permiten que el componente consuma tipos y datos en los metadatos de otros componentes de CLR.The metadata can be consumed by other CLR applications, and enables the component to consume types and data in the metadata of other CLR components. Para más información, vea Ensamblados mixtos (nativos y administrados).For more information, see Mixed (Native and Managed) Assemblies.

  • NetCore

    /clr:NetCore crea metadatos y código para el componente mediante la versión más reciente de .NET Framework multiplataforma, también conocida como .NET Core./clr:NetCore creates metadata and code for the component using the latest cross-platform .NET framework, also known as .NET Core. Los metadatos pueden ser consumidos por otras aplicaciones de .NET Core.The metadata can be consumed by other .NET Core applications. Además, la opción permite que el componente consuma tipos y datos en los metadatos de otros componentes de .NET Core.And, the option enables the component to consume types and data in the metadata of other .NET Core components.

  • nostdlib

    Indica al compilador que omita el \clr directorio predeterminado.Instructs the compiler to ignore the default \clr directory. El compilador genera errores si se incluyen varias versiones de un archivo DLL, como System.dll.The compiler produces errors if you include multiple versions of a DLL, such as System.dll. Esta opción permite especificar el marco de trabajo específico que se va a usar durante la compilación.This option lets you specify the specific framework to use during compilation.

  • pure

    /clr:pure está en desuso ./clr:pure is deprecated . Esta opción se ha quitado de Visual Studio 2017 y versiones posteriores.The option is removed in Visual Studio 2017 and later. Se recomienda trasladar el código que deba ser MSIL puro a C#.We recommend that you port code that must be pure MSIL to C#.

  • safe

    /clr:safe está en desuso ./clr:safe is deprecated . Esta opción se ha quitado de Visual Studio 2017 y versiones posteriores.The option is removed in Visual Studio 2017 and later. Se recomienda trasladar a C# el código de puerto que deba ser seguro para MSIL.We recommend that you port code that must be safe MSIL to C#.

  • noAssembly

    /clr:noAssembly está en desuso ./clr:noAssembly is deprecated . En su lugar /LN , use (crear módulo MSIL) .Use /LN (Create MSIL Module) instead.

    Indica al compilador que no inserte un manifiesto de ensamblado en el archivo de salida.Tells the compiler not to insert an assembly manifest into the output file. De forma predeterminada, la noAssembly opción no está en vigor.By default, the noAssembly option isn't in effect.

    Un programa administrado que no tiene metadatos de ensamblado en el manifiesto se conoce como módulo .A managed program that doesn't have assembly metadata in the manifest is known as a module . La noAssembly opción solo se puede usar para generar un módulo.The noAssembly option can be used only to produce a module. Si compila mediante /c y /clr:noAssembly , especifique la /NOASSEMBLY opción en la fase del enlazador para crear un módulo.If you compile by using /c and /clr:noAssembly , then specify the /NOASSEMBLY option in the linker phase to create a module.

    Antes de Visual Studio 2005, /clr:noAssembly es necesario /LD .Before Visual Studio 2005, /clr:noAssembly required /LD . /LD ahora está implícita cuando se especifica /clr:noAssembly ./LD is now implied when you specify /clr:noAssembly .

  • initialAppDomain

    initialAppDomain está obsoleto .initialAppDomain is obsolete . Permite que una aplicación de C++/CLI se ejecute en la versión 1 de CLR.Enables a C++/CLI application to run on version 1 of the CLR. Una aplicación que se compila mediante initialAppDomain no debe ser usada por una aplicación que utiliza ASP.net porque no se admite en la versión 1 de CLR.An application that's compiled by using initialAppDomain shouldn't be used by an application that uses ASP.NET because it's not supported in version 1 of the CLR.

ObservacionesRemarks

El código administrado es código que se puede inspeccionar y administrar con el CLR.Managed code is code that can be inspected and managed by the CLR. El código administrado puede tener acceso a los objetos administrados.Managed code can access managed objects. Para obtener más información, vea /clr restricciones.For more information, see /clr Restrictions.

Para obtener información sobre cómo desarrollar aplicaciones que definan y usen tipos administrados en C++, vea extensiones de componentes para plataformas en tiempo de ejecución.For information about how to develop applications that define and consume managed types in C++, see Component Extensions for Runtime Platforms.

Una aplicación compilada con /clr puede contener o no datos administrados.An application compiled by using /clr may or may not contain managed data.

Para habilitar la depuración en una aplicación administrada, vea /ASSEMBLYDEBUG (agregar DebuggableAttribute).To enable debugging on a managed application, see /ASSEMBLYDEBUG (Add DebuggableAttribute).

Solo se crea una instancia de los tipos CLR en el montón de recolección de elementos no utilizados.Only CLR types are instantiated on the garbage-collected heap. 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)].For more information, see Classes and Structs. Para compilar una función en código nativo, use la pragma unmanaged .To compile a function to native code, use the unmanaged pragma. Para obtener más información, vea managed , unmanaged .For more information, see managed, unmanaged.

De forma predeterminada, /clr no está en vigor.By default, /clr isn't in effect. Cuando /clr está en vigor, /MD también está en vigor.When /clr is in effect, /MD is also in effect. Para obtener más información, vea /MD , /MT , /LD (usar biblioteca de Run-Time).For more information, see /MD, /MT, /LD (Use Run-Time Library). /MD garantiza que las versiones multiproceso vinculadas dinámicamente de las rutinas en tiempo de ejecución se seleccionan en los archivos de encabezado estándar./MD ensures that the dynamically linked, multithreaded versions of the runtime routines are selected from the standard header files. 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.Multithreading is required for managed programming because the CLR garbage collector runs finalizers in an auxiliary thread.

Si compila con /c , puede especificar el tipo CLR del archivo de salida resultante mediante la /CLRIMAGETYPE opción del vinculador.If you compile by using /c , you can specify the CLR type of the resulting output file by using the /CLRIMAGETYPE linker option.

/clr implica /EHa y no /EH se admiten otras opciones para /clr ./clr implies /EHa , and no other /EH options are supported for /clr . Para obtener más información, vea /EH (modelo de control de excepciones).For more information, see /EH (Exception Handling Model).

Para obtener información sobre cómo determinar el tipo de imagen de CLR de un archivo, vea /CLRHEADER .For information about how to determine the CLR image type of a file, see /CLRHEADER.

Todos los módulos pasados a una invocación determinada del enlazador se deben compilar con la misma opción del compilador de la biblioteca en tiempo de ejecución ( /MD o /LD ).All modules passed to a given invocation of the linker must be compiled by using the same run-time library compiler option ( /MD or /LD ).

Use la /ASSEMBLYRESOURCE opción del enlazador para insertar un recurso en un ensamblado.Use the /ASSEMBLYRESOURCE linker option to embed a resource in an assembly. /DELAYSIGN/KEYCONTAINER /KEYFILE las opciones del vinculador, y también permiten personalizar el modo en que se crea un ensamblado./DELAYSIGN, /KEYCONTAINER, and /KEYFILE linker options also let you customize how an assembly is created.

Cuando /clr se usa, el _MANAGED símbolo se define como 1.When /clr is used, the _MANAGED symbol is defined to be 1. Para obtener más información, vea macros predefinidas.For more information, see Predefined macros.

Las variables globales de un archivo de objeto nativo se inicializan primero (durante DllMain si el ejecutable es un archivo dll) y, a continuación, se inicializan las variables globales de la sección administrada (antes de que se ejecute cualquier código administrado).The global variables in a native object file are initialized first (during DllMain if the executable is a DLL), and then the global variables in the managed section are initialized (before any managed code is run). #pragma init_seg solo afecta al orden de inicialización en las categorías administradas y no administradas.#pragma init_seg only affects the order of initialization in the managed and unmanaged categories.

Metadatos y clases sin nombreMetadata and Unnamed Classes

Las clases sin nombre aparecen en los metadatos en nombres como $UnnamedClass$<crc-of-current-file-name>$<index>$ , donde <index> es un recuento secuencial de las clases sin nombre en la compilación.Unnamed classes appear in metadata under names such as $UnnamedClass$<crc-of-current-file-name>$<index>$, where <index> is a sequential count of the unnamed classes in the compilation. Por ejemplo, el siguiente ejemplo de código genera una clase sin nombre en los metadatos.For example, the following code sample generates an unnamed class in metadata.

// clr_unnamed_class.cpp
// compile by using: /clr /LD
class {} x;

Use ildasm.exe para ver los metadatos.Use ildasm.exe to view metadata.

Para establecer esta opción del compilador en el entorno de desarrollo de Visual StudioTo set this compiler option in the Visual Studio development environment

  1. Abra el cuadro de diálogo Páginas de propiedades del proyecto.Open the project's Property Pages dialog box. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Establezca la lista desplegable configuración en todas las configuraciones y establezca la lista desplegable plataforma en todas las plataformas .Set the Configuration dropdown to All configurations , and set the Platform dropdown to All Platforms .

  3. Seleccione la página de propiedades de configuración > C/C++ > General .Select the Configuration Properties > C/C++ > General page.

  4. Modifique la propiedad compatibilidad con Common Language Runtime .Modify the Common Language Runtime Support property. Elija Aceptar para guardar los cambios.Choose OK to save your changes.

Nota

En el IDE de Visual Studio, la /clr opción del compilador se puede establecer de forma individual en la página de propiedades de configuración > C/C++ > General del cuadro de diálogo páginas de propiedades.In the Visual Studio IDE, the /clr compiler option can be individually set on the Configuration Properties > C/C++ > General page of the Property Pages dialog. Sin embargo, se recomienda usar una plantilla de CLR para crear el proyecto.However, we recommend you use a CLR template to create your project. Establece todas las propiedades necesarias para la creación correcta de un componente CLR.It sets all of the properties required for successful creation of a CLR component. Otra manera de establecer estas propiedades es usar la propiedad compatible con Common Language Runtime en la página propiedades de configuración > avanzadas del cuadro de diálogo páginas de propiedades.Another way to set these properties is to use the Common Language Runtime Support property on the Configuration Properties > Advanced page of the Property Pages dialog. Esta propiedad establece todas las demás opciones de herramientas relacionadas con CLR a la vez.This property sets all the other CLR-related tool options at once.

Para establecer esta opción del compilador mediante programaciónTo set this compiler option programmatically

Consulte tambiénSee also

Opciones del compilador MSVCMSVC Compiler Options
Sintaxis de Command-Line del compilador MSVCMSVC Compiler Command-Line Syntax