Delen via


C#-compileropties waarmee het genereren van code wordt bepaald

De volgende opties bepalen het genereren van code door de compiler. De nieuwe MSBuild-syntaxis wordt vet weergegeven. De oudere csc.exe syntaxis wordt weergegeven in code style.

  • Foutopsporingstype / -debug: foutopsporingsgegevens verzenden (of niet verzenden).
  • Optimaliseren / -optimize: optimalisaties inschakelen.
  • Deterministisch / -deterministic: byte-for-byte-equivalente uitvoer van dezelfde invoerbron produceren.
  • ProduceOnlyReferenceAssembly: Een referentieassembly / -refonly produceren, in plaats van een volledige assembly, als de primaire uitvoer.

Notitie

Raadpleeg compileropties voor meer informatie over het configureren van deze opties voor uw project.

Foutopsporingstype

De optie DebugType zorgt ervoor dat de compiler foutopsporingsgegevens genereert en in het uitvoerbestand of de uitvoerbestanden plaatst. Foutopsporingsgegevens worden standaard toegevoegd.

<DebugType>pdbonly</DebugType>

Voor alle compilerversies vanaf C# 6.0 is er geen verschil tussen pdbonly en volledig. Kies pdbonly. Zie PdbFile als u de locatie van het .pdb-bestand wilt wijzigen.

De volgende waarden zijn geldig:

Weergegeven als Betekenis
full Foutopsporingsgegevens verzenden naar .pdb-bestand met de standaardindeling voor het huidige platform:
Windows: een Windows pdb-bestand.
Linux/macOS: een draagbaar PDB-bestand .
pdbonly Hetzelfde als full. Zie de onderstaande opmerking voor meer informatie.
portable Informatie over foutopsporing verzenden naar .pdb-bestand met behulp van een platformoverschrijdende Portable PDB-indeling.
embedded Informatie over foutopsporing verzenden naar de .dll/.exe zelf (.pdb-bestand wordt niet geproduceerd) met behulp van de Portable PDB-indeling .

Belangrijk

De volgende informatie is alleen van toepassing op compilers ouder dan C# 6.0. De waarde van dit element kan full of pdbonly. Het volledige argument, dat van kracht is als u pdbonly niet opgeeft, schakelt het koppelen van een foutopsporingsprogramma aan het actieve programma in. Als u pdbonly opgeeft, wordt foutopsporing van broncode toegestaan wanneer het programma wordt gestart in het foutopsporingsprogramma, maar wordt alleen assembly weergegeven wanneer het actieve programma is gekoppeld aan het foutopsporingsprogramma. Gebruik deze optie om builds voor foutopsporing te maken. Als u Volledig gebruikt, moet u er rekening mee houden dat er enige invloed is op de snelheid en grootte van geoptimaliseerde JIT-code en een kleine impact op de codekwaliteit met volledig. We raden pdbonly of geen PDB aan voor het genereren van releasecode. Een verschil tussen pdbonly en volledig is dat met de volledige compiler een DebuggableAttribute, die wordt gebruikt om de JIT-compiler te vertellen dat foutopsporingsgegevens beschikbaar zijn. Daarom krijgt u een foutmelding als uw code de DebuggableAttribute set bevat op onwaar als u volledig gebruikt. Zie Voor meer informatie over het configureren van de foutopsporingsprestaties van een toepassing een installatiekopieën eenvoudiger te debuggen.

Optimaliseren

Met de optie Optimaliseren kunt u optimalisaties die door de compiler worden uitgevoerd, in- of uitschakelen om uw uitvoerbestand kleiner, sneller en efficiënter te maken. De optie Optimaliseren is standaard ingeschakeld voor een buildconfiguratie van de release . Deze is standaard uitgeschakeld voor een foutopsporing en eventuele andere buildconfiguraties.

<Optimize>true</Optimize>

U stelt de optie Optimaliseren in vanaf de pagina Eigenschappen van build voor uw project in Visual Studio.

Optimaliseren geeft ook aan dat de algemene taalruntime code tijdens runtime moet optimaliseren. Optimalisaties zijn standaard uitgeschakeld. Geef Optimize+ op om optimalisaties in te schakelen. Wanneer u een module bouwt die door een assembly moet worden gebruikt, gebruikt u dezelfde instellingen optimaliseren als die door de assembly worden gebruikt. Het is mogelijk om de opties optimaliseren en foutopsporing te combineren.

Deterministische

Zorgt ervoor dat de compiler een assembly produceert waarvan de byte-for-byte-uitvoer identiek is in compilaties voor identieke invoer.

<Deterministic>true</Deterministic>

Compileruitvoer van een bepaalde set invoer is standaard uniek, omdat de compiler een tijdstempel en een MVID (a Module.ModuleVersionId. In feite is het een GUID die de module en versie uniek identificeert.) die wordt gegenereerd op basis van willekeurige getallen. U gebruikt de <Deterministic> optie om een deterministische assembly te produceren, waarvan de binaire inhoud identiek is in compilaties zolang de invoer hetzelfde blijft. In een dergelijke build worden de tijdstempel- en MVID-velden vervangen door waarden die zijn afgeleid van een hash van alle compilatie-invoer. De compiler beschouwt de volgende invoer die van invloed is op determinisme:

  • De reeks opdrachtregelparameters.
  • De inhoud van het RSP-antwoordbestand van de compiler.
  • De exacte versie van de gebruikte compiler en de bijbehorende assembly's waarnaar wordt verwezen.
  • Het huidige mappad.
  • De binaire inhoud van alle bestanden die rechtstreeks of indirect aan de compiler worden doorgegeven, waaronder:
    • Bronbestanden
    • Assembly's waarnaar wordt verwezen
    • Modules waarnaar wordt verwezen
    • Resources
    • Het bestand met de sterke naamsleutel
    • @ antwoordbestanden
    • Analyses
    • Regelsets
    • Andere bestanden die kunnen worden gebruikt door analyses
  • De huidige cultuur (voor de taal waarin diagnostische gegevens en uitzonderingsberichten worden geproduceerd).
  • De standaardcodering (of de huidige codepagina) als de codering niet is opgegeven.
  • Het bestaan, het niet-bestaan en de inhoud van bestanden op de zoekpaden van de compiler (bijvoorbeeld opgegeven door -lib of -recurse).
  • Het CLR-platform (Common Language Runtime) waarop de compiler wordt uitgevoerd.
  • De waarde van , die van invloed kan zijn op het laden van %LIBPATH%analyseafhankelijkheid.

Deterministische compilatie kan worden gebruikt om te bepalen of een binair bestand wordt gecompileerd vanuit een vertrouwde bron. Deterministische uitvoer kan nuttig zijn wanneer de bron openbaar beschikbaar is. U kunt ook bepalen of buildstappen afhankelijk zijn van wijzigingen in binair bestand dat in het buildproces wordt gebruikt.

ProduceOnlyReferenceAssembly

De optie ProduceOnlyReferenceAssembly geeft aan dat een referentieassembly uitvoer moet zijn in plaats van een implementatieassembly, als primaire uitvoer. Met de parameter ProduceOnlyReferenceAssembly wordt het uitvoeren van PDBs op de achtergrond uitgeschakeld, omdat referentieassembly's niet kunnen worden uitgevoerd.

<ProduceOnlyReferenceAssembly>true</ProduceOnlyReferenceAssembly>

Referentieassembly's zijn een speciaal type assembly. Referentieassembly's bevatten alleen de minimale hoeveelheid metagegevens die nodig zijn om het openbare API-oppervlak van de bibliotheek weer te geven. Ze bevatten declaraties voor alle leden die significant zijn bij het verwijzen naar een assembly in buildhulpprogramma's, maar sluit alle ledenimplementaties en declaraties van privéleden uit die geen waarneembare invloed hebben op hun API-contract. Zie Referentieassembly's voor meer informatie.

De opties ProduceOnlyReferenceAssembly en ProduceReferenceAssembly sluiten elkaar wederzijds uit.