/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 compiladoinitialAppDomain
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. /DELAYSIGN
As opções de /KEYFILE
vinculador , /KEYCONTAINER
e 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
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.
De definir o menu suspenso Configuração como Todas as configurações e definir o menu suspenso Plataforma como Todas as Plataformas.
Selecione a página Propriedades de ConfiguraçãoC>/C++>Geral.
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 CompileAsManaged.
Consulte também
MSVC do compilador do MSVC
sintaxe MSVC do Command-Line compilador