/CLR (Common linguagem tempo de execução compilação)
Permite que aplicativos e componentes usar os recursos de que o common linguagem tempo de execução (CLR).
/clr[:options]
Argumentos
options
Um ou mais dos seguintes, separados por vírgula:/clr
Cria o metadados do aplicativo que podem ser consumidos por outros aplicativos CLR e permite que o seu aplicativo consomem dados nos metadados de outros componentes do CLR e tipos.Para obter mais informações, consulte:
/clr:pure
Produz um arquivo de saída somente MSIL com nenhum código executável nativo, embora ele possa conter tipos nativos compilados para MSIL.Para obter mais informações, consulte Código puro e que.
/clr:safe
Produz um MSIL somente (sem código executável nativo) e arquivo de saída pode ser verificada./clr:safe permite a verificação de diagnóstico (Ferramenta de PEVerify (Peverify.exe)).Para obter mais informações, consulte Escrever Verifiably código de segurança de tipo.
/clr:oldSyntax
Ativa extensões gerenciadas para sintaxe do C++, o original Visual C++ sintaxe para a programação do CLR.Observação: gerenciado Extensions para C++ sintaxe é preterido em Microsoft Visual C++ 2005. Você deve usar /clr:oldSyntax somente se você está mantendo um aplicativo do Visual C++ que usa o gerenciado Extensions para C++. Se você estiver desenvolvendo um novo aplicativo, use a sintaxe atualizada; consulte Novo Features Idioma in Visual C++ Para obter mais informações.
Se você tiver um gerenciado Extensions para C++ aplicativo, você pode começar a porta de seu projeto para usar a nova sintaxe; consulte Portando e atualizando programas Para obter mais informações.
/clr:noAssembly
The noAssembly opção especifica que um manifesto do assembly não deve ser inserido no arquivo de saída. Por padrão, a noAssembly opção não está em vigor.Observação: The noAssembly opção está obsoleto no Visual C++ 2005. Use /LN (criar MSIL módulo) em vez disso. Para obter mais informações, consulte Opções do compilador preterido no Visual C++ 2005.
Um programa gerenciado não tem metadados do assembly do manifesto é chamado um módulo.The noAssembly opção pode ser usada somente para produzir um módulo. Se você compilar com /c (compilar sem vinculação) e /clr:noAssembly, em seguida, especifique a / NOASSEMBLY (criar um módulo MSIL) opção na fase de vinculador para criar um módulo.
Antes de Visual C++ 2005, /clr:noAssembly implícita /clr. No entanto, /clr Agora também oferece suporte /clr:oldSyntax, para que você deve especificar um /clr formulário quando você especifica /clr:noAssembly. For example, /clr:noAssembly /clr creates a module using the new Visual C++ CLR syntax and /clr:noAssembly,oldSyntax creates a module using Managed Extensions for C++.
Antes de Visual C++ 2005, /clr:noAssembly necessário /LD. /LD agora está implícito com você especificar /clr:noAssembly.
/clr:initialAppDomain
Permite que um Visual C++ a execução na versão 1 do aplicativo a Common linguagem tempo de execução. Se você usar initialAppDomain, em seguida, você poderá ver alguns dos problemas abordados no artigo da Base de dados de Conhecimento da Microsoft Q309694. Você pode encontrar artigos da Base de dados de Conhecimento na mídia de biblioteca MSDN ou no http://suporte.Microsoft.com/suporte/.Um aplicativo compilado com initialAppDomain nunca deve ser usado por um aplicativo usando o ASP.NET. Atualizar para um tempo de execução mais recente para fazer o trabalho do ASP.NET com C++.
Comentários
Código gerenciado é um código que pode ser inspecionado e gerenciado pelo common linguagem tempo de execução.Código gerenciado pode acessar objetos gerenciados.
Consulte também /CLR restrições.
See Novo Features Idioma in Visual C++ Para obter informações sobre como desenvolver aplicativos que definem e consumam tipos gerenciado.
Um aplicativo compilado com /clr pode ou não pode conter dados gerenciado.
Para permitir depuração em um aplicativo gerenciado, consulte / ASSEMBLYDEBUG (Adicionar DebuggableAttribute).
Somente tipos CLR serão instanciados no heap coletado ao lixo.Para obter mais informações, consulte Classes and Estruturas (Gerenciado). Para compilar uma função para código nativo, use o unmanaged pragma. Para obter mais informações, consulte gerenciado, não gerenciado.
Por default, /clr não está efetivo.Quando /clr está em vigor /MD também está em vigor (para obter mais informações, consulte /MD)./MD garante que as versões dinamicamente vinculadas, multithread as rotinas de tempo de execução são selecionadas dos arquivos de cabeçalho padrão (. h). Multithreading é necessária para gerenciado programação em parte porque o coletor de lixo CLR executa os finalizadores em um segmento auxiliar.
Se você compilar com /c, você pode especificar o tipo CLR (IJW, confiável ou puro) do arquivo de saída resultante com / CLRIMAGETYPE (Especifica o tipo de imagem CLR).
/clr implica /EHae nenhuma Outros /EH opções são permitidas com /clr. Consulte /EH (exceção tratamento Model) para obter mais informações.
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 chamada do vinculador devem ter sido compilados com o mesmo em time de execução opção biblioteca de compilador (/MD ou /LD).
Use o / ASSEMBLYRESOURCE (incorporar um recurso gerenciado) opção de vinculador para incorporar um recurso em um assembly. / DELAYSIGN (parcialmente assinar uma assembly), / KEYCONTAINER (Especifica um contêiner de chave para assinar uma assembly), e / KEYFILE (especificar a chave ou emparelhar de chaves para assinar uma assembly) Opções do vinculador também permitem que você personalize como um assembly é criado.
Quando /clr é usado, o _MANAGED símbolo é definido como 1. Para obter mais informações, consulte Macros predefinidas.
As variáveis global nos arquivos de um objeto nativo será inicializado primeiro (durante DllMain se o executável é uma DLL) e, em seguida, as variáveis global no gerenciado seção será inicializada (antes de qualquer código gerenciado é executado).#pragmainit_seg só afeta a ordem de inicialização nas categorias gerenciadas e.
Compilando com /clr:safe é semelhante a compilação com /plataforma:AnyCPU em idiomas such sistema autônomo translation from VPE for Csharp.
Imagens seguras e puras
Uma imagem pura irá usar uma versão CLR da biblioteca C Runtime.No entanto, a CRT não é verificável, portanto, não será possível usar a CRT durante a compilação de /clr:safe. Para obter mais informações, consulte Bibliotecas de tempo de execução c.
Exemplos de código nativo não pode aparecer em uma imagem pura de assembly embutido, setjmp, ou longjmp.
Cada ponto de entrada de uma imagem puro ou segura é gerenciado.Durante a compilação de /clr, o ponto de entrada é nativo. Para obter mais informações, consulte __clrcall.
Durante a compilação de /clr:safe, variáveis são por padrão Appdomaine não pode ser por processo. Com /clr:pure, appdomain é o padrão, mas você pode usar processo variáveis.
Quando a execução de um .exe de 32 bit que foi compilado /clr ou /clr:pure em um sistema operacional de 64 bit, o aplicativo será executado no WOW64, que permite que um aplicativo de 32 bit para ser executado pelo CLR 32 bit em um sistema operacional de 64 bit. Por padrão, um EXE compilado com /clr:safe vai ser executado do CLR de 64 bit em um computador que esteja executando um sistema operacional de 64 bit (em um sistema operacional de 32 bit que será executado mesmo .exe do CLR de 32 bit). No entanto, é possível que seu aplicativo seguro carrega um componente de 32 bit.Nesse caso, uma imagem de segurança em execução com suporte para 64 bit do sistema operacional falhará ao ser carregado o aplicativo de 32 bit (BadFormatException).Para garantir que uma imagem de segurança continua a executar quando ele carrega uma imagem de 32 bit em um sistema operacional de 64 bit, você deve usar / CLRIMAGETYPE (Especifica o tipo de imagem CLR) Para alterar os metadados (.corflags), marcá-la para ser executado no WOW64. Uma linha de comando de exemplo segue (substitua o símbolo de entrada):
cl /clr:safe t.cpp /link /clrimagetype:pure /entry:?main@@$$HYMHXZ /subsystem:console
Para obter informações sobre como obter um nome decorado, consulte Usar uma listagem para exibir nomes enfeitada. Para obter mais informações sobre programação de 64 bit, consulte Programação de 64 bits (como fazer no Visual C++).
Para obter Exemplos, orientações e obter mais informações, consulte:
Metadados e classes sem nome
Classes sem nome aparecerá nos metadados de chamada da seguinte maneira: $UnnamedClass$CRC do nome do arquivo corrente$index$, where índice é uma contagem seqüencial das classes sem nome na compilação.Por exemplo, o código de exemplo a seguir irá gerar uma classe sem nome nos metadados:
// clr_unnamed_class.cpp
// compile with: /clr /LD
class {} x;
Use ildasm.exe para exibir os metadados.
Para conjunto esta opção do compilador no ambiente de desenvolvimento do Visual Studio
em aberto propriedade Páginas caixa de diálogo.Para obter detalhes, consulte:Como: Abrir o Projeto Propriedade Páginas.
clicar no Propriedades de configuração pasta.
clicar no Geral página de propriedades.
Modificar o Suporte a Common linguagem tempo de execuçãopropriedade .
See / NOASSEMBLY (criar um módulo MSIL) Para obter informações sobre como criar um módulo.
Observação: Quando /clr é ativada em um projeto Páginas de propriedades caixa de diálogo, sistema autônomo propriedades de opção do compilador que não são compatível com /clr também serão ajustadas, se necessário. Por exemplo, se /RTC é conjunto e, em seguida, /clr estiver habilitada, /RTC será desativada.
Além disso, quando você depurar um /clr aplicativo, o Tipo do depurador propriedade deve ser definida como Misto or Apenas gerenciado.Para obter mais informações, consulte Configurações do projeto para um C++ Depurar Configuration.
Para conjunto esta opção do compilador por meio de programação
- SeeCompileAsManaged.