/clr (Compilação do Common Language Runtime)

Permite que aplicativos e componentes usem recursos do CLR (Common Language Runtime) e habilita a compilação do C++/CLI.

Syntax

/clr[:opções]

Argumentos

options
Um ou mais dos seguintes argumentos separados por vírgula.

  • nenhum

    Sem opções, cria /clr metadados para o componente. Os metadados podem ser consumidos por outros aplicativos CLR e permitem que o componente consuma tipos e dados nos metadados de outros componentes CLR. Para obter mais informações, confira Assemblies mistos (nativos e gerenciados).

  • netcore

    Disponível a partir do Visual Studio 2019 versão 16.4, /clr:netcore o cria metadados e código para o componente usando o .NET Framework de plataforma cruzada mais recente, também conhecido como .NET Core. Os metadados podem ser consumidos por outros aplicativos .NET Core. Além disso, a opção permite que o componente consuma tipos e dados nos metadados de outros componentes do .NET Core.

  • nostdlib

    Instrui o compilador a ignorar o diretório \clr padrão. O compilador produzirá erros se você incluir várias versões de uma DLL, como System.dll. Essa opção permite especificar a estrutura específica a ser usada durante a compilação.

  • pure

    /clr:pure foi preterido. A opção foi removida do Visual Studio 2017 e posterior. Recomendamos que você porte o código que precisa ser MSIL puro para o C#.

  • safe

    /clr:safe foi preterido. A opção foi removida do Visual Studio 2017 e posterior. Recomendamos que você porte o código que precisa ser MSIL seguro para o C#.

  • noAssembly

    /clr:noAssembly foi preterido. Use /LN (Criar Módulo MSIL) em vez disso.

    Informa ao compilador para não inserir um manifesto do assembly no arquivo de saída. Por padrão, a noAssembly opção não está em vigor.

    Um programa gerenciado que não tem metadados de assembly no manifesto é conhecido como módulo. A noAssembly opção só pode ser usada para produzir um módulo. Se você compilar usando e /c/clr:noAssembly, especifique a /NOASSEMBLY opção na fase do vinculador para criar um módulo.

    Antes Visual Studio 2005, /clr:noAssembly exigia /LD. /LD agora está implícito quando você especifica /clr:noAssembly.

  • initialAppDomain

    initialAppDomain está obsoleto. Permite que um aplicativo C++/CLI seja executado na versão 1 do CLR. Um aplicativo compilado initialAppDomain usando não deve ser usado por um aplicativo que usa ASP.NET porque não tem suporte na versão 1 do CLR.

Comentários

O código gerenciado é um código que pode ser inspecionado e gerenciado pelo CLR. O código gerenciado pode acessar objetos gerenciados. Para obter mais informações, consulte Restrições/clr.

Para obter informações sobre como desenvolver aplicativos que definem e consomem tipos gerenciados no C++, consulte Extensões de componente para plataformas de runtime.

Um aplicativo compilado usando pode /clr ou não conter dados gerenciados.

Para habilitar a depuração em um aplicativo gerenciado, consulte /ASSEMBLYDEBUG (Adicionar DebuggableAttribute).

Somente os tipos CLR são instautados no heap coletado como lixo. Para obter mais informações, confira Classes e structs. Para compilar uma função para código nativo, use o pragma unmanaged. Para obter mais informações, consulte managed, unmanaged.

Por padrão, /clr não está em vigor. Quando /clr está em vigor, /MD também está em vigor. Para obter mais informações, consulte/MD , /MT, /LD (Usar Run-Time Library). /MD garante que as versões multithread das rotinas de runtime vinculadas dinamicamente sejam selecionadas nos arquivos de header padrão. O multithreading é necessário para a programação gerenciada porque o coletor de lixo do CLR executa os finalizadores em um thread auxiliar.

Se você compilar usando /c, poderá especificar o tipo CLR do arquivo de saída resultante usando a opção /CLRIMAGETYPE de vinculador.

/clr implica /EHa, e nenhuma outra /EH opção tem suporte para /clr. Para obter mais informações, consulte /EH (Modelo de tratamento de exceção).

Para obter informações sobre como determinar o tipo de imagem CLR de um arquivo, consulte /CLRHEADER.

Todos os módulos passados para uma determinada invocação do linker devem ser compilados usando a mesma opção do compilador de biblioteca em tempo de executar (/MD ou /LD).

Use a /ASSEMBLYRESOURCE opção de vinculador para inserir um recurso em um assembly. /DELAYSIGNAs opções de /KEYFILE vinculador , /KEYCONTAINERe também permitem personalizar como um assembly é criado.

Quando /clr é usado, o _MANAGED símbolo é definido como 1. Para obter mais informações, consulte Macros predefinidos.

As variáveis globais em um arquivo de objeto nativo são inicializadas primeiro ( DllMain durante se o executável for uma DLL) e, em seguida, as variáveis globais na seção gerenciada são inicializadas (antes de qualquer código gerenciado ser executado). #pragma init_seg afeta apenas a ordem de inicialização nas categorias gerenciadas e não gerenciadas.

Metadados e classes sem nome

Classes sem nome aparecem em metadados $UnnamedClass$<crc-of-current-file-name>$<index>$em nomes como , <index> em que é uma contagem sequencial das classes sem nome na compilação. Por exemplo, o exemplo de código a seguir gera uma classe sem nome nos metadados.

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

Use ildasm.exe para exibir os metadados.

Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio

  1. Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.

  2. De definir o menu suspenso Configuração como Todas as configurações e definir o menu suspenso Plataforma como Todas as Plataformas.

  3. Selecione a página Propriedades de ConfiguraçãoC>/C++>Geral.

  4. Modifique a propriedade Suporte do Common Language Runtime . Escolha OK para salvar suas alterações.

Observação

No IDE Visual Studio, /clr a opção do compilador pode ser definida individualmente > na página Propriedades de ConfiguraçãoC/C++>Geral da caixa de diálogo Páginas de Propriedades. No entanto, recomendamos que você use um modelo CLR para criar seu projeto. Ele define todas as propriedades necessárias para a criação bem-sucedida de um componente CLR. Outra maneira de definir essas propriedades é usar a propriedade Suporte do Common Language Runtime> na página Propriedades de ConfiguraçãoAdições Avançadas da caixa de diálogo Páginas de Propriedades. Essa propriedade define todas as outras opções de ferramenta relacionadas ao CLR ao mesmo tempo.

Para definir essa opção do compilador via programação

Consulte também

MSVC do compilador do MSVC
sintaxe MSVC do Command-Line compilador