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

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

Sintaxe

/clr[:options]

Argumentos

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

  • nenhum

    Sem opções, /clr cria metadados para o componente. Os metadados podem ser consumidos por outros aplicativos do CLR e permitem que o componente consuma tipos e dados nos metadados de outros componentes do 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 cria metadados e código para o componente usando a estrutura .NET de plataforma cruzada mais recente, também conhecida como .NET Core. Os metadados podem ser consumidos por outros aplicativos .NET Core. E a opção permite que o componente consuma tipos e dados nos metadados de outros componentes .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 determinar a estrutura específica que 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).

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

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

    Antes do 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 execute na versão 1 do CLR. Um aplicativo compilado usando initialAppDomain não deve ser utilizado por um aplicativo que usa ASP.NET porque não tem suporte na versão 1 do CLR.

Comentários

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

Para obter mais informações sobre como desenvolver aplicativos que definem e consomem tipos gerenciados em C++, consulte Extensões de componentes para plataformas de tempo de execução.

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

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

Somente os tipos de CLR são instanciados no heap de coleta de 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 estiver em vigor, /MD também estará. Para obter mais informações, consulte /MD, /MT, /LD (Usar Biblioteca de Runtime). /MD garante que as versões multi-threaded vinculadas dinamicamente das rotinas de runtime sejam selecionadas nos arquivos de cabeçalho 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 do CLR do arquivo de saída resultante usando a opção de vinculador /CLRIMAGETYPE.

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

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

Todos os módulos passados para uma determinada invocação do vinculador deverão ser compilados usando a mesma opção do compilador de biblioteca de runtime (/MD ou /LD).

Use a opção do vinculador /ASSEMBLYRESOURCE para inserir um recurso em um assembly. As opções do vinculador /DELAYSIGN, /KEYCONTAINER e /KEYFILE também permitem personalizar como um assembly será criado.

Quando /clr for usado, o símbolo _MANAGED será definido como 1. Para obter mais informações, consulte Macros predefinidas.

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

Metadados e classes sem nome

Classes não nomeadas aparecem em metadados nos nomes como $UnnamedClass$<crc-of-current-file-name>$<index>$, em que <index> é uma contagem sequencial das classes não nomeadas 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. Defina a lista suspensa Configuração como Todas as configurações e defina a lista suspensa Plataforma como Todas as Plataformas.

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

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

Observação

No IDE do Visual Studio, a opção do compilador /clr poderá ser definida individualmente na página Propriedades da Configuração>C/C++>Geral da caixa de diálogo Páginas de Propriedades. No entanto, é recomendável usar um modelo do CLR para criar o projeto. Ele define todas as propriedades necessárias para a criação bem-sucedida de um componente do CLR. Outra maneira de definir essas propriedades é usar a propriedade Suporte a Common Language Runtime na página Propriedades da Configuração>Avançadas da caixa de diálogo Páginas de Propriedades. Essa propriedade define todas as outras opções de ferramentas relacionadas ao CLR de uma só vez.

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

Confira também

Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC