Delen via


Geavanceerde C#-compileropties

De volgende opties ondersteunen geavanceerde scenario's. De nieuwe MSBuild-syntaxis wordt vet weergegeven. De oudere csc.exe syntaxis wordt weergegeven in code style.

  • MainEntryPoint, StartupObject / -main: Geef het type op dat het toegangspunt bevat.
  • PdbFile / -pdb: Geef de naam van het informatiebestand voor foutopsporing op.
  • PathMap / -pathmap: Geef een toewijzing op voor de uitvoer van bronpadnamen door de compiler.
  • ApplicationConfiguration / -appconfig: Geef een toepassingsconfiguratiebestand op met assemblybindingsinstellingen.
  • AdditionalLibPaths / -lib: geef extra mappen op waarin u naar verwijzingen wilt zoeken.
  • GenerateFullPaths / -fullpath: Compiler genereert volledig gekwalificeerde paden.
  • PreferredUILang / -preferreduilang: geef de naam van de voorkeursuitvoertaal op.
  • BaseAddress / -baseaddress: Geef het basisadres op dat de bibliotheek moet worden gebouwd.
  • ChecksumAlgorithm / -checksumalgorithm : geef algoritme op voor het berekenen van de controlesom van het bronbestand dat is opgeslagen in PDB.
  • CodePage / -codepage: geef de codepagina op die moet worden gebruikt bij het openen van bronbestanden.
  • Utf8Output / -utf8output: Uitvoercompilerberichten in UTF-8-codering.
  • FileAlignment / -filealign: Geef de uitlijning op die wordt gebruikt voor uitvoerbestandsecties.
  • ErrorEndLocation / -errorendlocation: uitvoerregel en kolom van de eindlocatie van elke fout.
  • NoStandardLib / -nostdlib: Niet verwijzen naar standaardbibliotheek mscorlib.dll.
  • SubsystemVersion / -subsystemversion: Geef de subsysteemversie van deze assembly op.
  • ModuleAssemblyName / -moduleassemblyname: naam van de assembly waarvan deze module deel uitmaakt.
  • ReportIVTs-reportivts / : Produceren aanvullende informatie over System.Runtime.CompilerServices.InternalsVisibleToAttribute informatie.

U voegt een van deze opties toe aan een <PropertyGroup> element in uw *.csproj bestand:

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

MainEntryPoint of StartupObject

Met deze optie geeft u de klasse op die het toegangspunt voor het programma bevat, als meer dan één klasse een Main methode bevat.

<StartupObject>MyNamespace.Program</StartupObject>

or

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Waar Program is het type dat de Main methode bevat. De opgegeven klassenaam moet volledig gekwalificeerd zijn; deze moet de volledige naamruimte bevatten die de klasse bevat, gevolgd door de klassenaam. Wanneer de Main methode zich bijvoorbeeld in de Program klasse in de MyApplication.Core naamruimte bevindt, moet de compileroptie zijn -main:MyApplication.Core.Program. Als uw compilatie meer dan één type met een Main methode bevat, kunt u opgeven welk type de Main methode bevat.

Notitie

Deze optie kan niet worden gebruikt voor een project met instructies op het hoogste niveau, zelfs niet als dat project een of meer Main methoden bevat.

PdbFile

Met de PdbFile-compileroptie geeft u de naam en locatie van het bestand met foutopsporingssymbolen op. De filename waarde geeft de naam en locatie van het bestand met foutopsporingssymbolen op.

<PdbFile>filename</PdbFile>

Wanneer u DebugType opgeeft, maakt de compiler een .pdb-bestand in dezelfde map waarin de compiler het uitvoerbestand maakt (.exe of .dll). Het .pdb-bestand heeft dezelfde basisbestandsnaam als de naam van het uitvoerbestand. Met PdbFile kunt u een niet-standaardbestandsnaam en -locatie opgeven voor het .pdb-bestand. Deze compileroptie kan niet worden ingesteld in de Ontwikkelomgeving van Visual Studio en kan niet programmatisch worden gewijzigd.

PathMap

Notitie

Als u PathMap opgeeft, kunnen onderbrekingspunten niet werken in lokale foutopsporingsversies. Stel PathMap alleen in voor builds voor productie- of continue integratie.

Met de pathmap-compileroptie geeft u op hoe fysieke paden worden toegewezen aan bronpadnamen die door de compiler worden uitgevoerd. Met deze optie wordt elk fysiek pad toegewezen op de computer waarop de compiler wordt uitgevoerd naar een bijbehorend pad dat in de uitvoerbestanden moet worden geschreven. In het volgende voorbeeld path1 is het volledige pad naar de bronbestanden in de huidige omgeving en sourcePath1 wordt het bronpad vervangen door path1 eventuele uitvoerbestanden. Als u meerdere toegewezen bronpaden wilt opgeven, scheidt u deze met een komma.

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

De compiler schrijft het bronpad om de volgende redenen naar de uitvoer:

  1. Het bronpad wordt vervangen door een argument wanneer het CallerFilePathAttribute wordt toegepast op een optionele parameter.
  2. Het bronpad is ingesloten in een PDB-bestand.
  3. Het pad van het PDB-bestand wordt ingesloten in een PE-bestand (draagbaar uitvoerbaar bestand).

ApplicationConfiguration

Met de optie ApplicationConfiguration-compiler kan een C#-toepassing de locatie opgeven van het toepassingsconfiguratiebestand (app.config) van een assembly naar de Common Language Runtime (CLR) tijdens de assemblybindingstijd.

<ApplicationConfiguration>file</ApplicationConfiguration>

Waar file is het toepassingsconfiguratiebestand dat assemblybindingsinstellingen bevat. Een gebruik van ApplicationConfiguration is geavanceerde scenario's waarin een assembly moet verwijzen naar zowel de .NET Framework-versie als de .NET Framework voor Silverlight-versie van een bepaalde referentieassembly tegelijk. Een XAML-ontwerper die is geschreven in Windows Presentation Foundation (WPF) moet bijvoorbeeld verwijzen naar zowel het WPF-bureaublad als de gebruikersinterface van de ontwerper en de subset van WPF die is opgenomen in Silverlight. Dezelfde ontwerpassembly heeft toegang tot beide assembly's. Standaard veroorzaken de afzonderlijke verwijzingen een compilerfout, omdat assemblybinding de twee assembly's als gelijkwaardig ziet. Met de applicationConfiguration-compileroptie kunt u de locatie opgeven van een app.config-bestand dat het standaardgedrag uitschakelt met behulp van een <supportPortability> tag, zoals wordt weergegeven in het volgende voorbeeld.

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

De compiler geeft de locatie van het bestand door aan de assemblybindingslogica van de CLR.

Notitie

Als u het bestand app.config wilt gebruiken dat al in het project is ingesteld, voegt u de eigenschapstag <UseAppConfigForCompiler> toe aan het .csproj-bestand en stelt u de waarde in op true. Als u een ander app.config-bestand wilt opgeven, voegt u de eigenschapstag <AppConfigForCompiler> toe en stelt u de waarde ervan in op de locatie van het bestand.

In het volgende voorbeeld ziet u een app.config-bestand waarmee een toepassing verwijzingen kan hebben naar zowel de .NET Framework-implementatie als de .NET Framework voor Silverlight-implementatie van een .NET Framework-assembly die in beide implementaties bestaat. De optie ApplicationConfiguration-compiler geeft de locatie van dit app.config-bestand op.

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

AdditionalLibPaths

Met de optie AdditionalLibPaths geeft u de locatie op van assembly's waarnaar wordt verwezen met de optie Verwijzingen .

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

Waar dir1 bevindt zich een map waarin de compiler moet zoeken als er geen assembly waarnaar wordt verwezen, wordt gevonden in de huidige werkmap (de map waaruit u de compiler aanroept) of in de systeemmap van de common language Runtime. dir2 is een of meer extra mappen om te zoeken naar assemblyverwijzingen. Scheid mapnamen met een komma en zonder witruimte ertussen. De compiler zoekt naar assemblyverwijzingen die niet volledig zijn gekwalificeerd in de volgende volgorde:

  1. Huidige werkmap.
  2. De algemene taalruntimesysteemmap.
  3. Mappen die zijn opgegeven door AdditionalLibPaths.
  4. Mappen die zijn opgegeven door de lib-omgevingsvariabele.

Gebruik Verwijzing om een assembly-verwijzing op te geven. AdditionalLibPaths is additief. Als u deze meerdere keren opgeeft, worden deze toegevoegd aan eventuele eerdere waarden. Omdat het pad naar de afhankelijke assembly niet is opgegeven in het assemblymanifest, vindt en gebruikt de toepassing de assembly in de algemene assemblycache. De compiler die naar de assembly verwijst, impliceert niet dat de algemene taalruntime de assembly tijdens runtime kan vinden en laden. Zie Hoe de runtime assembly's zoekt voor meer informatie over hoe de runtime zoekt naar assembly's waarnaar wordt verwezen.

GenerateFullPaths

De optie GenerateFullPaths zorgt ervoor dat de compiler het volledige pad naar het bestand opgeeft bij het weergeven van compilatiefouten en waarschuwingen.

<GenerateFullPaths>true</GenerateFullPaths>

Standaard geven fouten en waarschuwingen die het gevolg zijn van compilatie de naam op van het bestand waarin een fout is gevonden. De optie GenerateFullPaths zorgt ervoor dat de compiler het volledige pad naar het bestand opgeeft. Deze compileroptie is niet beschikbaar in Visual Studio en kan niet programmatisch worden gewijzigd.

PreferredUILang

Met de optie PreferredUILang compiler kunt u de taal opgeven waarin de C#-compiler uitvoer weergeeft, zoals foutberichten.

<PreferredUILang>language</PreferredUILang>

Waar language is de taalnaam van de taal die moet worden gebruikt voor compileruitvoer. U kunt de optie PreferredUILang compiler gebruiken om de taal op te geven die de C#-compiler moet gebruiken voor foutberichten en andere opdrachtregeluitvoer. Als het taalpakket voor de taal niet is geïnstalleerd, wordt de taalinstelling van het besturingssysteem gebruikt.

BaseAddress

Met de optie BaseAddress kunt u het voorkeursbasisadres opgeven waarop een DLL moet worden geladen. Voor meer informatie over wanneer en waarom u deze optie kunt gebruiken, raadpleegt u De WebLog van Larry Resourceman.

<BaseAddress>address</BaseAddress>

Waar address is het basisadres voor de DLL. Dit adres kan worden opgegeven als een decimaal, hexadecimaal of octaal getal. Het standaardbasisadres voor een DLL wordt ingesteld door de .NET Common Language Runtime. Het woord in lagere volgorde in dit adres wordt afgerond. Als u bijvoorbeeld opgeeft 0x11110001, wordt deze afgerond op 0x11110000. Als u het ondertekeningsproces voor een DLL wilt voltooien, gebruikt u SN.EXE met de optie -R.

ChecksumAlgorithm

Met deze optie bepaalt u het controlesom-algoritme dat we gebruiken om bronbestanden in de PDB te coderen.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

De algorithm moet SHA1 (standaard) of SHA256.

Codepage

Met deze optie geeft u op welke codepagina tijdens de compilatie moet worden gebruikt als de vereiste pagina niet de huidige standaardcodepagina voor het systeem is.

<CodePage>id</CodePage>

Waar id is de id van de codepagina die moet worden gebruikt voor alle broncodebestanden in de compilatie. De compiler probeert eerst alle bronbestanden te interpreteren als UTF-8. Als uw broncodebestanden zich in een andere codering dan UTF-8 bevinden en andere tekens dan 7-bits ASCII-tekens gebruiken, gebruikt u de optie CodePage om op te geven welke codepagina moet worden gebruikt. CodePage is van toepassing op alle broncodebestanden in uw compilatie. Zie GetCPInfo voor informatie over het vinden van welke codepagina's op uw systeem worden ondersteund.

Utf8Output

Met de optie Utf8Output wordt compileruitvoer weergegeven met behulp van UTF-8-codering.

<Utf8Output>true</Utf8Output>

In sommige internationale configuraties kan compileruitvoer niet correct worden weergegeven in de console. Gebruik Utf8Output en omleiden compileruitvoer naar een bestand.

FileAlignment

Met de optie FileAlignment kunt u de grootte van secties in het uitvoerbestand opgeven. Geldige waarden zijn 512, 1024, 2048, 4096 en 8192. Deze waarden bevinden zich in bytes.

<FileAlignment>number</FileAlignment>

U stelt de optie FileAlignment in vanaf de pagina Geavanceerd van debuild-eigenschappen voor uw project in Visual Studio. Elke sectie wordt uitgelijnd op een grens die een veelvoud is van de FileAlignment-waarde . Er is geen vaste standaardwaarde. Als FileAlignment niet is opgegeven, kiest de algemene taalruntime een standaardinstelling tijdens het compileren. Door de sectiegrootte op te geven, is dit van invloed op de grootte van het uitvoerbestand. Het wijzigen van de sectiegrootte kan handig zijn voor programma's die worden uitgevoerd op kleinere apparaten. Gebruik DUMPBIN om informatie te bekijken over secties in uw uitvoerbestand.

ErrorEndLocation

Hiermee wordt de compiler geïnstrueerd om regel en kolom van de eindlocatie van elke fout uit te voeren.

<ErrorEndLocation>true</ErrorEndLocation>

Standaard schrijft de compiler de beginlocatie in de bron voor alle fouten en waarschuwingen. Wanneer deze optie is ingesteld op true, schrijft de compiler zowel de begin- als eindlocatie voor elke fout en waarschuwing.

NoStandardLib

NoStandardLib voorkomt het importeren van mscorlib.dll, waarmee de volledige systeemnaamruimte wordt gedefinieerd.

<NoStandardLib>true</NoStandardLib>

Gebruik deze optie als u uw eigen systeemnaamruimte en -objecten wilt definiëren of maken. Als u NoStandardLib niet opgeeft, wordt mscorlib.dll geïmporteerd in uw programma (hetzelfde als opgeven<NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Hiermee geeft u de minimale versie van het subsysteem waarop het uitvoerbare bestand wordt uitgevoerd. Meestal zorgt deze optie ervoor dat het uitvoerbare bestand beveiligingsfuncties kan gebruiken die niet beschikbaar zijn in oudere versies van Windows.

Notitie

Als u het subsysteem zelf wilt opgeven, gebruikt u de optie TargetType-compiler.

<SubsystemVersion>major.minor</SubsystemVersion>

Hiermee major.minor geeft u de minimaal vereiste versie van het subsysteem op, zoals uitgedrukt in een punt notatie voor primaire en secundaire versies. U kunt bijvoorbeeld opgeven dat een toepassing niet kan worden uitgevoerd op een besturingssysteem dat ouder is dan Windows 7. Stel de waarde van deze optie in op 6.01, zoals in de tabel verderop in dit artikel wordt beschreven. U geeft de waarden op voor major en minor als gehele getallen. Voorloopnullen in de minor versie wijzigen de versie niet, maar volgnullen wel. 6.1 en 6.01 verwijzen bijvoorbeeld naar dezelfde versie, maar 6.10 verwijst naar een andere versie. U wordt aangeraden de secundaire versie als twee cijfers uit te drukken om verwarring te voorkomen.

De volgende tabel bevat algemene subsysteemversies van Windows.

Windows-versie Subsysteemversie
Windows Server 2003 5.02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

De standaardwaarde van de subversion-compileroptie is afhankelijk van de voorwaarden in de volgende lijst:

  • De standaardwaarde is 6.02 als een compileroptie in de volgende lijst is ingesteld:
  • De standaardwaarde is 6.00 als u MSBuild gebruikt, richt u zich op .NET Framework 4.5 en u hebt geen van de compileropties ingesteld die eerder in deze lijst zijn opgegeven.
  • De standaardwaarde is 4,00 als aan geen van de vorige voorwaarden wordt voldaan.

ModuleAssemblyName

Hiermee geeft u de naam op van een assembly waarvan de niet-openbare typen een .netmodule toegang hebben.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName moet worden gebruikt bij het bouwen van een .netmodule en waar aan de volgende voorwaarden wordt voldaan:

  • De .netmodule heeft toegang nodig tot niet-openbare typen in een bestaande assembly.
  • U weet de naam van de assembly waarin de .netmodule wordt gebouwd.
  • De bestaande assembly heeft vriend-assembly toegang verleend tot de assembly waarin de .netmodule wordt gebouwd.

Zie de optie TargetType van module voor meer informatie over het bouwen van een .netmodule. Zie Vriendenassembly's voor meer informatie over vriendenassembly's.

ReportIVTs

Aanvullende diagnostische informatie over System.Runtime.CompilerServices.InternalsVisibleToAttribute gevonden tijdens de compilatie in- of uitschakelen:

<ReportIVTs>true</ReportIVTs>

De diagnostische gegevens zijn ingeschakeld als de inhoud van het element is uitgeschakeld als falsedeze al dan niet aanwezig istrue.

ReportIVTs rapporteert de volgende informatie wanneer deze is ingeschakeld:

  1. Niet-toegankelijke diagnostische gegevens van leden omvatten hun bronassembly, indien anders dan de huidige assembly.
  2. De compiler drukt de assembly-identiteit af van het project dat wordt gecompileerd, de assemblynaam en de openbare sleutel.
  3. Voor elke verwijzing die aan de compiler is doorgegeven, wordt deze afgedrukt;
    1. De assembly-identiteit van de verwijzing
    2. Of de verwijzing het huidige project verleent InternalsVisibleTo
    3. De naam en alle openbare sleutels van alle assembly's die zijn verleend InternalsVisibleTo door deze assembly