Condividi tramite


/clr (Compilazione Common Language Runtime)

Aggiornamento: novembre 2007

Consente ad applicazioni e componenti di utilizzare le funzionalità di Common Language Runtime (CLR).

/clr[:options]

Argomenti

  • options
    Una o più opzioni tra quelle riportate di seguito, separate da una virgola:

    • /clr
      Crea per l'applicazione metadati utilizzabili da altre applicazioni CLR e consente all'applicazione di utilizzare i tipi e i dati dei metadati di altri componenti CLR.

      Per ulteriori informazioni, vedere:

    • /clr:pure
      Genera un file di output solo MSIL senza codice eseguibile nativo, ma può contenere tipi nativi compilati in MSIL.

      Per ulteriori informazioni, vedere Codice pure e verificabile.

    • /clr:safe
      Genera un file di output solo MSIL (senza codice eseguibile nativo) e verificabile. /clr:safe attiva le informazioni di diagnostica della verifica (Strumento PEVerify (Peverify.exe)).

      Per ulteriori informazioni, vedere Scrittura di codice indipendente dai tipi verificabile.

    • /clr:oldSyntax
      Attiva la sintassi delle estensioni gestite per C++, ossia la sintassi originale di Visual C++ per la programmazione CLR.

      Nota la sintassi delle estensioni gestite di C++ è obsoleta in Microsoft Visual C++ 2005. È necessario utilizzare /clr:oldSyntax solo se si utilizza un'applicazione di Visual C++ con le estensioni gestite di C++. Se si sta sviluppando una nuova applicazione, utilizzare la sintassi aggiornata. Per ulteriori informazioni, vedere Language Features for Targeting the CLR.

      Se si dispone di un'applicazione con le estensioni gestite per C++, sarà possibile iniziare a eseguire il porting del progetto per l'utilizzo della nuova sintassi. Per ulteriori informazioni, vedere Porting e aggiornamento di programmi.

    • /clr:noAssembly
      L'opzione noAssembly specifica di non inserire un manifesto dell'assembly nel file di output. L'opzione noAssembly è disattiva per impostazione predefinita.

      Nota l'opzione noAssembly è obsoleta in Visual C++ 2005. Utilizzare invece /LN (Crea modulo MSIL). Per ulteriori informazioni, vedere Opzioni del compilatore obsolete in Visual C++ 2005.

      Un programma gestito nel cui manifesto non sono presenti metadati dell'assembly viene definito modulo. L'opzione noAssembly può essere utilizzata solo per produrre un modulo. Se si esegue la compilazione con /c (Compila senza collegamenti) e /clr:noAssembly, specificare l'opzione /NOASSEMBLY (Crea un modulo MSIL) nella fase di collegamento per creare un modulo.

      Nelle versioni precedenti a Visual C++ 2005**/clr:noAssembly** implicava l'utilizzo di /clr. Tuttavia, poiché /clr ora supporta anche /clr:oldSyntax, è necessario specificare un form /clr quando si specifica /clr:noAssembly. Ad esempio, /clr:noAssembly /clr crea un modulo utilizzando la nuova sintassi CLR di Visual C++ e /clr:noAssembly,oldSyntax crea un modulo utilizzando le estensioni gestite per C++.

      Nelle versioni precedenti a Visual C++ 2005, per /clr:noAssembly era necessaria l'opzione /LD. Ora /LD è implicita quando viene specificata l'opzione /clr:noAssembly.

    • /clr:initialAppDomain
      Consente l'esecuzione di un'applicazione Visual C++ sulla versione 1 di Common Language Runtime. Se si utilizza initialAppDomain, è possibile riscontrare alcuni dei problemi presentati nell'articolo della Knowledge Base Q309694. Gli articoli della Knowledge Base sono disponibili sul supporto di MSDN Library o all'indirizzo https://support.microsoft.com/support/ (informazioni in lingua inglese).

      È opportuno che un'applicazione compilata con initialAppDomain non venga mai utilizzata da un'applicazione che utilizza ASP.NET. Affinché ASP.NET funzioni con C++, è necessario eseguire l'aggiornamento a una versione di runtime più recente.

Note

Per codice gestito si intende del codice che può essere verificato e gestito dal Common Language Runtime. Il codice gestito può accedere agli oggetti gestiti.

Vedere anche Limitazioni di /clr.

Per informazioni sullo sviluppo di applicazioni che definiscono e utilizzano i tipi gestiti, vedere Language Features for Targeting the CLR.

Un'applicazione compilata con /clr può contenere o meno dati gestiti.

Per consentire l'esecuzione del debug nelle applicazioni gestite, vedere /ASSEMBLYDEBUG (Aggiunge DebuggableAttribute).

Nell'heap sottoposto a Garbage Collection verrà creata un'istanza solo dei tipi CLR. Per ulteriori informazioni, vedere Classes and Structs (Managed). Per compilare una funzione in codice nativo, utilizzare il pragma unmanaged. Per ulteriori informazioni, vedere managed, unmanaged.

Per impostazione predefinita, l'opzione /clr non è attiva. Quando /clr è attiva, lo è anche l'opzione /MD. Per ulteriori informazioni, vedere /MD. /MD assicura che le versioni multithread collegate in modo dinamico delle routine di runtime vengano selezionate dai file di intestazione standard con estensione h. Il multithreading è necessario per la programmazione gestita in parte perché il Garbage Collector CLR esegue i finalizzatori in un thread ausiliario.

Se si esegue la compilazione con /c, è possibile specificare il tipo CLR (IJW, safe o pure) del file di output ottenuto utilizzando /CLRIMAGETYPE (Specifica il tipo di immagine CLR).

/clr implica /EHa. Non sono consentite altre opzioni /EH con /clr. Per ulteriori informazioni, vedere /EH (Modello di gestione delle eccezioni).

Per informazioni sulla modalità di determinazione del tipo di immagine CLR di un file, vedere /CLRHEADER.

È necessario che tutti i moduli passati a una determinata chiamata del linker siano stati compilati con la stessa opzione del compilatore con le librerie di runtime (/MD o /LD).

Utilizzare l'opzione del linker /ASSEMBLYRESOURCE (Incorpora una risorsa gestita) per incorporare una risorsa in un assembly. Le opzioni del linker /DELAYSIGN (Firma parzialmente un assembly), /KEYCONTAINER (Specifica un contenitore di chiavi per firmare un assembly) e /KEYFILE (Specifica una chiave o una coppia di chiavi per firmare un assembly) consentono inoltre di personalizzare la modalità di creazione di un assembly.

Quando viene utilizzata l'opzione /clr, il valore del simbolo _MANAGED è pari a 1. Per ulteriori informazioni, vedere Predefined Macros.

Vengono inizializzate prima le variabili globali nei file di un oggetto nativo (durante DllMain se l'eseguibile è una DLL), quindi le variabili globali della sezione gestita (prima dell'esecuzione del codice gestito). #pragmainit_seg influisce unicamente sull'ordine di inizializzazione nelle categorie gestite e non gestite.

La compilazione con /clr:safe è analoga alla compilazione con /platform:anycpu in linguaggi quale C#.

Immagini di tipo safe e pure

In un'immagine di tipo pure viene utilizzata una versione CLR della libreria di runtime C. Tuttavia, poiché non è verificabile, la libreria CRT non può essere utilizzata quando si esegue la compilazione con l'opzione /clr:safe. Per ulteriori informazioni, vedere C Run-Time Libraries.

Esempi di codice nativo che non è possibile inserire in un'immagine di tipo pure sono assembly inline, setjmp o longjmp.

Vengono gestiti tutti i punti di ingresso di un'immagine di tipo pure o safe. Quando si esegue la compilazione con l'opzione /clr, il punto di ingresso è nativo. Per ulteriori informazioni, vedere __clrcall.

Quando si esegue la compilazione con l'opzione /clr:safe, le variabili sono appdomain per impostazione predefinita e non possono essere specifiche del processo. Con l'opzione /clr:pure, il valore predefinito è appdomain, ma è possibile utilizzare le variabili process.

Quando viene eseguito un exe a 32 bit compilato con /clr o /clr:pure in un sistema operativo a 64 bit, l'applicazione viene eseguita con WOW64, che consente l'esecuzione di un'applicazione a 32 bit in CLR a 32 bit in un ambiente operativo a 64 bit. Per impostazione predefinita, un exe compilato con /clr:safe viene eseguito in CLR a 64 bit su un computer con sistema operativo a 64 bit. In un sistema operativo a 32 bit lo stesso exe verrebbe eseguito in CLR a 32 bit. È tuttavia possibile che nell'applicazione di tipo safe venga caricato un componente a 32 bit. In tal caso, l'esecuzione di un'immagine di tipo safe nel supporto per 64 bit del sistema operativo verrà interrotta al momento del caricamento dell'applicazione a 32 bit (BadFormatException). Per fare in modo che il caricamento di un'immagine a 32 bit in un ambiente operativo a 64 bit non comporti l'interruzione dell'esecuzione di un'immagine di tipo safe, è necessario utilizzare /CLRIMAGETYPE (Specifica il tipo di immagine CLR) per modificare i metadati (.corflags), specificando che l'immagine deve essere eseguita con WOW64. Di seguito viene riportata una riga di comando di esempio (sostituire il simbolo del punto di ingresso):

cl /clr:safe t.cpp /link /clrimagetype:pure /entry:?main@@$$HYMHXZ /subsystem:console

Per informazioni su come ottenere un nome decorato, vedere Utilizzo di un listato per la visualizzazione dei nomi decorati. Per ulteriori informazioni sulla programmazione a 64 bit, vedere Programmazione a 64 bit (Ricerca per categorie in Visual C++).

Per esempi, procedure dettagliate e ulteriori informazioni, vedere:

Metadati e classi senza nome

Le classi senza nome vengono visualizzate nei metadati con il seguente nome: $UnnamedClass$crc-of-current-file-name$index$, dove index è un conteggio sequenziale delle classi senza nome nella compilazione. L'esempio di codice che segue genererà una classe senza nome nei metadati:

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

Utilizzare ildasm.exe per visualizzare i metadati.

Per impostare l'opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Procedura: aprire le pagine delle proprietà dei progetti.

  2. Selezionare la cartella Proprietà di configurazione.

  3. Fare clic sulla pagina delle proprietà Generale.

  4. Modificare la proprietà Supporto di Common Language Runtime.

    Per informazioni sulla creazione dei moduli, vedere /NOASSEMBLY (Crea un modulo MSIL).

    Nota:

    Quando si attiva l'opzione /clr nella finestra di dialogo Pagine delle proprietà di un progetto, se necessario, vengono modificate anche le proprietà delle opzioni del compilatore non compatibili con /clr. Se, ad esempio, viene impostata l'opzione /RTC e quindi viene attivata /clr, /RTC verrà disattivata.

    Inoltre, quando si esegue il debug di un'applicazione /clr, la proprietà Tipo debugger deve essere impostata su Misto o Solo gestito. Per ulteriori informazioni, vedere Impostazioni di progetto per una configurazione di debug C++.

Per impostare l'opzione del compilatore a livello di codice

Vedere anche

Riferimenti

Opzioni del compilatore

Impostazione delle opzioni del compilatore