/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 usandoinitialAppDomain
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
e 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, confira 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
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.
Defina a lista suspensa Configuração como Todas as configurações e defina a lista suspensa Plataforma como Todas as Plataformas.
Selecione a página Propriedades da Configuração>C/C++>Geral.
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
- Consulte CompileAsManaged.
Confira também
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC