Opzioni avanzate del compilatore C#

Le opzioni seguenti supportano scenari avanzati. La nuova sintassi di MSBuild viene visualizzata in grassetto. La sintassi csc.exe precedente è illustrata in code style.

  • MainEntryPoint, StartupObject / -main: specificare il tipo che contiene il punto di ingresso.
  • PdbFile / -pdb: specificare il nome del file di informazioni di debug.
  • PathMap / -pathmap: specificare un mapping per i nomi di percorsi di origine restituiti dal compilatore
  • ApplicationConfiguration / -appconfig: specificare un file di configurazione dell'applicazione contenente le impostazioni di associazione dell’assembly.
  • AdditionalLibPaths / -lib: specificare directory aggiuntive in cui cercare riferimenti.
  • GenerateFullPaths / -fullpath: il compilatore genera percorsi completi.
  • PreferredUILang / -preferreduilang: specificare il nome della lingua di output preferito.
  • BaseAddress / -baseaddress: specificare l'indirizzo di base per la libreria da compilare.
  • ChecksumAlgorithm / -checksumalgorithm: specificare l'algoritmo per il calcolo del checksum del file di origine archiviato in PDB.
  • CodePage / -codepage: specificare la tabella codici da utilizzare per l'apertura dei file di origine
  • CodePage / -utf8output: restituisce i messaggi del compilatore usando la codifica UTF-8.
  • FileAlignment / -filealign: specifica l'allineamento utilizzato per le sezioni del file di output.
  • ErrorEndLocation / -errorendlocation: restituisce riga e colonna della posizione finale di ogni errore.
  • NoStandardLib / -nostdlib: non referenziare la libreria standard mscorlib.dll.
  • SubsystemVersion / -subsystemversion: specificare la versione del sottosistema di questo assembly.
  • ModuleAssemblyName / -moduleassemblyname: nome dell'assembly di cui fa parte il modulo.
  • ReportIVT / -reportivts: produrre informazioni aggiuntive sulle informazioni System.Runtime.CompilerServices.InternalsVisibleToAttribute.

È possibile aggiungere una di queste opzioni in un elemento <PropertyGroup> nel file *.csproj:

<PropertyGroup>
    <StartupObject>...</StartupObject>
    ...
</PropertyGroup>

MainEntryPoint o StartupObject

Questa opzione specifica la classe che contiene il punto di ingresso al programma, quando più classi contengono un metodo Main.

<StartupObject>MyNamespace.Program</StartupObject>

or

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Dove Program è il tipo che contiene il metodo Main. Il nome della classe specificato deve essere completo. Deve includere lo spazio dei nomi completo che contiene la classe, seguito dal nome della classe. Ad esempio, quando il metodo Main è all'interno della classe Program nello spazio dei nomi MyApplication.Core, l'opzione del compilatore deve essere -main:MyApplication.Core.Program. Se la compilazione include più tipi con un metodo Main, è possibile specificare il tipo che contiene il metodo Main.

Nota

Questa opzione non può essere usata per un progetto che include istruzioni di primo livello, anche se tale progetto contiene uno o più metodi Main.

PdbFile

L'opzione del compilatore PdbFile consente di specificare il nome e il percorso del file dei simboli di debug. Il valore filename specifica il nome e il percorso del file dei simboli di debug.

<PdbFile>filename</PdbFile>

Quando si specifica DebugType, il compilatore crea un file .pdb nella stessa directory in cui il compilatore crea il file di output (.exe o .dll). Il file .pdb ha lo stesso nome di file di base del nome del file di output. PdbFile consente di specificare un nome e un percorso non predefiniti per il file .pdb. Questa opzione del compilatore non può essere impostata nell'ambiente di sviluppo di Visual Studio, né modificata a livello di codice.

PathMap

Nota

Se si specifica PathMap, i punti di interruzione non funzioneranno nelle compilazioni di debug locali. Impostare PathMap solo per compilazioni di produzione o integrazione continua.

L'opzione del compilatore PathMap specifica come eseguire il mapping di percorsi fisici ai nomi di percorso di origine restituiti dal compilatore. Questa opzione esegue il mapping di ogni percorso fisico nel computer in cui viene eseguito il compilatore in un percorso corrispondente che deve essere scritto nei file di output. Nell'esempio seguente path1 è il percorso completo dei file di origine nell'ambiente corrente e sourcePath1 è il percorso di origine sostituito da path1 in tutti i file di output. Per specificare più percorsi di origine mappati, separarli con una virgola.

<PathMap>path1=sourcePath1,path2=sourcePath2</PathMap>

Il compilatore scrive il percorso di origine nell'output per i motivi seguenti:

  1. Il percorso di origine viene sostituito per un argomento quando si applica CallerFilePathAttribute a un parametro facoltativo.
  2. Il percorso di origine è incorporato in un file PDB.
  3. Il percorso del file PDB è incorporato in un file PE (eseguibile portabile).

ApplicationConfiguration

L'opzione ApplicationConfiguration del compilatore consente a un'applicazione C# di specificare il percorso del file di configurazione (app.config) dell'applicazione di un assembly per Common Language Runtime (CLR) in fase di associazione degli assembly.

<ApplicationConfiguration>file</ApplicationConfiguration>

Dove file è il file di configurazione dell'applicazione che contiene le impostazioni di associazione degli assembly. L'opzione ApplicationConfiguration può essere usata anche in scenari avanzati nei quali un assembly deve fare riferimento allo stesso tempo alla versione di .NET Framework e a quella di .NET Framework per Silverlight di un particolare assembly di riferimento. Ad esempio, una finestra di progettazione XAML scritta in Windows Presentation Foundation (WPF) potrebbe fare riferimento al desktop WPF, per l'interfaccia utente della finestra di progettazione, e al subset di WPF incluso in Silverlight. Lo stesso assembly della finestra di progettazione deve accedere a entrambi gli assembly. Per impostazione predefinita, i riferimenti separati provocano un errore del compilatore, poiché l'associazione di assembly considera uguali i due assembly. L'opzione ApplicationConfiguration del compilatore consente di specificare il percorso del file app.config che disabilita il comportamento predefinito tramite un tag <supportPortability>, come illustrato nell'esempio seguente.

<supportPortability PKT="7cec85d7bea7798e" enable="false"/>

Il compilatore passa il percorso del file alla logica di associazione degli assembly di CLR.

Nota

Per usare il file app.config già impostato nel progetto, aggiungere un tag di proprietà <UseAppConfigForCompiler> al file .csproj e impostarne il valore su true. Per specificare un file app.config diverso, aggiungere un tag di proprietà <AppConfigForCompiler> e impostarne il valore sul percorso del file.

L'esempio seguente illustra un file app.config che consente a un'applicazione di fare riferimento all'implementazione di .NET Framework e di .NET Framework per Silverlight per qualsiasi assembly di .NET Framework presente in entrambe le implementazioni. L'opzione del compilatore ApplicationConfiguration specifica il percorso del file app.config.

<configuration>
  <runtime>
    <assemblyBinding>
      <supportPortability PKT="7cec85d7bea7798e" enable="false"/>
      <supportPortability PKT="31bf3856ad364e35" enable="false"/>
    </assemblyBinding>
  </runtime>
</configuration>

AdditionalLibPaths

L'opzione AdditionalLibPaths specifica il percorso degli assembly a cui fa riferimento l'opzione Riferimenti.

<AdditionalLibPaths>dir1[,dir2]</AdditionalLibPaths>

Dove dir1 è la directory in cui il compilatore può effettuare la ricerca se un assembly cui viene fatto riferimento non si trova nella cartella di lavoro corrente (quella da cui si chiama il compilatore) o nella directory di sistema di Common Language Runtime. dir2 è una o più directory aggiuntive in cui effettuare la ricerca dei riferimenti agli assembly. Separare i nomi delle directory con una virgola, senza inserire spazi. La ricerca dei riferimenti non completi agli assembly viene operata nell'ordine seguente:

  1. Directory di lavoro corrente,
  2. Directory di sistema di Common Language Runtime.
  3. Directory specificate da AdditionalLibPaths.
  4. Directory specificate dalla variabile di ambiente LIB.

Per specificare un riferimento a un assembly, usare Reference. AdditionalLibPaths è di tipo additivo. Se viene specificata più volte, ogni nuovo valore verrà aggiunto a eventuali valori precedenti. Poiché il percorso dell'assembly dipendente non è specificato nel manifesto dell'assembly, l'applicazione troverà e userà l'assembly nella Global Assembly Cache. Il compilatore che fa riferimento all'assembly non implica che Common Language Runtime possa trovare e caricare l'assembly in fase di esecuzione. Per informazioni dettagliate sulla modalità di ricerca degli assembly a cui viene fatto riferimento in fase di esecuzione, vedere Come il runtime individua gli assembly.

GenerateFullPaths

L'opzione GenerateFullPaths fa in modo che il compilatore specifichi il percorso completo del file quando vengono elencati gli avvisi e gli errori di compilazione.

<GenerateFullPaths>true</GenerateFullPaths>

Per impostazione predefinita, per gli errori e gli avvisi generati dalla compilazione viene specificato il nome del file in cui si è verificato un errore. L'opzione GenerateFullPaths fa in modo che il compilatore specifichi il percorso completo del file. Questa opzione del compilatore non è disponibile in Visual Studio e non può essere modificata a livello di codice.

PreferredUILang

Utilizzando l'opzione del compilatore PreferredUILang, è possibile specificare la lingua in cui tramite il compilatore C# viene visualizzato l'output, ad esempio i messaggi di errore.

<PreferredUILang>language</PreferredUILang>

Dove language è il nome della lingua da usare per l'output del compilatore. È possibile utilizzare l'opzione del compilatore PreferredUILang per specificare la lingua che si desidera venga utilizzata dal compilatore C# per i messaggi di errore e altri output della riga di comando. Se il language pack della lingua non è installato, viene utilizzata l'impostazione della lingua del sistema operativo.

BaseAddress

L'opzione BaseAddress consente di specificare l'indirizzo di base preferito in cui caricare una DLL. Per altre informazioni su quando e perché usare questa opzione, vedere il blog di Larry Osterman.

<BaseAddress>address</BaseAddress>

Dove address è l’indirizzo di base per la DLL. Questo indirizzo può essere specificato come numero decimale, esadecimale o ottale. L'indirizzo di base predefinito per una DLL viene impostato dal Common Language Runtime di .NET. La parola di ordine inferiore in questo indirizzo verrà arrotondata. Ad esempio, se si specifica 0x11110001, viene arrotondato a 0x11110000. Per completare il processo di firma di una DLL, usare SN.EXE con l'opzione -R.

ChecksumAlgorithm

Questa opzione controlla l'algoritmo checksum usato per codificare i file di origine nel PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

algorithm deve essere SHA1 (impostazione predefinita) o SHA256.

CodePage

Questa opzione specifica la tabella codici da usare durante la compilazione, se la pagina richiesta non è la tabella codici predefinita corrente per il sistema.

<CodePage>id</CodePage>

Dove id è l’ID della tabella codici da usare per tutti i file di codice sorgente nella compilazione. Il compilatore tenta innanzitutto di interpretare tutti i file di origine come UTF-8. Se i file del codice sorgente sono codificati con una codifica diversa da UTF-8 e usano caratteri diversi dai caratteri ASCII a 7 bit, usare l'opzione CodePagee per specificare la tabella codici da usare. CodePage si applica a tutti i file di codice sorgente nella compilazione. Per informazioni su come individuare le tabelle codici supportate nel sistema, vedere GetCPInfo.

Utf8Output

L'opzione Utf8Output visualizza l'output del compilatore tramite la codifica UTF-8.

<Utf8Output>true</Utf8Output>

In alcune configurazioni internazionali, l'output del compilatore non può essere visualizzato correttamente nella console. Usare Utf8Output e reindirizzare l'output del compilatore a un file.

FileAlignment

L'opzione FileAlignment consente di specificare le dimensioni delle sezioni nel file di output. I valori validi sono 512, 1024, 2048, 4096 e 8192. I valori sono in byte.

<FileAlignment>number</FileAlignment>

Impostare l'opzione FileAlignment dalla pagina Avanzatedelle proprietà Build per il progetto in Visual Studio. Ogni sezione è allineata in base a un limite corrispondente multiplo del valore FileAlignment. Non vi è alcun valore predefinito fisso. Se FileAlignment non è specificato, Common Language Runtime sceglie un valore predefinito in fase di compilazione. Specificando le dimensioni della sezione, si influisce sulla dimensione del file di output. La modifica delle dimensioni della sezione può essere utile per i programmi che vengono eseguiti su dispositivi di piccole dimensioni. Usare DUMPBIN per visualizzare informazioni sulle sezioni nel file di output.

ErrorEndLocation

Indica al compilatore di restituire la riga e la colonna della posizione finale di ogni errore.

<ErrorEndLocation>true</ErrorEndLocation>

Per impostazione predefinita, il compilatore scrive il percorso iniziale nell'origine per tutti gli errori e gli avvisi. Quando questa opzione è impostata su “true” (vero), il compilatore scrive sia il percorso iniziale che quello finale per ogni errore e avviso.

NoStandardLib

NoStandardLib impedisce l'importazione di mscorlib.dll, che definisce l'intero spazio dei nomi di sistema.

<NoStandardLib>true</NoStandardLib>

Usare questa opzione se si vuole definire o creare uno spazio dei nomi e oggetti System personalizzati. Se non si specifica NoStandardLib, mscorlib.dll viene importata nel programma (equivale a specificare <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Specifica la versione minima del sottosistema in cui il file eseguibile può essere eseguito. In genere, questa opzione assicura che il file eseguibile possa usare le funzionalità di protezione che non sono disponibili con le versioni precedenti di Windows.

Nota

Per specificare il sottosistema stesso, usare l'opzione del compilatore TargetType.

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor specifica la versione minima richiesta per il sottosistema, espressa in una notazione del punto per le versioni principali e secondarie. Ad esempio, è possibile specificare che un'applicazione non può essere eseguita in un sistema operativo precedente a Windows 7. Impostare il valore di questa opzione su 6.01, come descritto nella tabella presentata più avanti in questo articolo. Specificare i valori per major e minor come numeri interi. Gli zeri iniziali della versione minor non modificano la versione, a differenza degli zeri finali. Ad esempio, 6.1 e 6.01 si fanno riferimento alla stessa versione, ma 6.10 fa riferimento a una versione diversa. È consigliabile esprimere la versione secondaria con due cifre per evitare confusione.

Nella tabella seguente sono elencate le versioni comuni del sottosistema di Windows.

Versione Windows Versione del sottosistema
Windows Server 2003 5,02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

Il valore predefinito dell'opzione del compilatore SubsystemVersion dipende dalle condizioni elencate di seguito:

  • Il valore predefinito è 6.02 se è impostata un'opzione del compilatore nell'elenco seguente:
  • Il valore predefinito è 6.00 se si usa MSBuild, se la destinazione è .NET Framework 4.5 e se non è stata impostata una delle opzioni del compilatore specificate in precedenza in questo elenco.
  • Il valore predefinito è 4.00 se nessuna di queste condizioni è vera.

ModuleAssemblyName

Specifica il nome di un assembly i cui tipi non pubblici possono accedere a un file .netmodule.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

È necessario usare ModuleAssemblyName quando si compila un file con estensione netmodule, se sono soddisfatte le condizioni seguenti:

  • Tramite il file con estensione .netmodule deve essere possibile accedere a tipi non pubblici in un assembly esistente.
  • L'utente conosce il nome dell'assembly in cui verrà compilato il file con estensione netmodule.
  • L'assembly esistente ha concesso l'accesso assembly Friend all'assembly in cui verrà compilato il file con estensione netmodule.

Per altre informazioni sulla creazione di un modulo .netmodule, vedere l’opzione TargetType del modulo. Per altre informazioni sugli assembly Friend, vedere Assembly Friend .

ReportIVT

Abilitare o disabilitare informazioni di diagnostica aggiuntive su System.Runtime.CompilerServices.InternalsVisibleToAttribute rilevate durante la compilazione:

<ReportIVTs>true</ReportIVTs>

La diagnostica viene abilitata se il contenuto dell'elemento è true, disabilitata se è false oppure non è presente.

I ReportIVT segnalano le informazioni seguenti quando sono abilitati:

  1. Qualsiasi diagnostica inaccessibile di un membro ne include il relativo assembly di origine, se diverso dall'assembly corrente.
  2. Il compilatore stampa l'identità dell'assembly del progetto da compilare, il nome dell'assembly e la chiave pubblica.
  3. Per ogni riferimento passato al compilatore, viene effettuata la stampa;
    1. Identità dell'assembly del riferimento
    2. Indica se il riferimento concede InternalsVisibleTo al progetto corrente
    3. Nome e tutte le chiavi pubbliche di tutti gli assembly che hanno concesso InternalsVisibleTo da questo assembly