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, voorkomt u dat onderbrekingspunten 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:
- Het bronpad wordt vervangen door een argument wanneer het CallerFilePathAttribute wordt toegepast op een optionele parameter.
- Het bronpad is ingesloten in een PDB-bestand.
- 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:
- Huidige werkmap.
- De algemene taalruntimesysteemmap.
- Mappen die zijn opgegeven door AdditionalLibPaths.
- 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 de build-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 false
deze al dan niet aanwezig istrue
.
ReportIVTs rapporteert de volgende informatie wanneer deze is ingeschakeld:
- Niet-toegankelijke diagnostische gegevens van leden omvatten hun bronassembly, indien anders dan de huidige assembly.
- De compiler drukt de assembly-identiteit af van het project dat wordt gecompileerd, de assemblynaam en de openbare sleutel.
- Voor elke verwijzing die aan de compiler is doorgegeven, wordt deze afgedrukt;
- De assembly-identiteit van de verwijzing
- Of de verwijzing het huidige project verleent
InternalsVisibleTo
- De naam en alle openbare sleutels van alle assembly's die zijn verleend
InternalsVisibleTo
door deze assembly