C#-compileropties die de uitvoer van de compiler beheren

De volgende opties bepalen het genereren van compileruitvoer.

MSBuild csc.exe Beschrijving
DocumentationFile -doc: Xml-documentbestand genereren op basis van /// opmerkingen.
OutputAssembly -out: Geef het uitvoerassemblybestand op.
PlatformTarget -platform: Geef de CPU van het doelplatform op.
ProduceReferenceAssembly -refout: Genereer een referentieassembly.
TargetType -target: Geef het type van de uitvoerassembly op.

DocumentationFile

Met de optie DocumentationFile kunt u documentatieopmerkingen in een XML-bestand plaatsen. Zie Aanbevolen tags voor opmerkingen bij documentatie voor meer informatie over het documenteren van uw code. De waarde geeft het pad naar het XML-uitvoerbestand op. Het XML-bestand bevat de opmerkingen in de broncodebestanden van de compilatie.

<DocumentationFile>path/to/file.xml</DocumentationFile>

Het broncodebestand dat instructies op het hoogste of hoogste niveau bevat, wordt eerst uitgevoerd in de XML. U wilt vaak het gegenereerde .xml-bestand gebruiken met IntelliSense. De bestandsnaam van de .xml moet hetzelfde zijn als de assemblynaam. Het .xml-bestand moet zich in dezelfde map bevinden als de assembly. Wanneer naar de assembly wordt verwezen in een Visual Studio-project, wordt ook het .xml-bestand gevonden. Zie Codeopmerkingen opgeven voor meer informatie over het genereren van codeopmerkingen. Tenzij u compileert met <TargetType:Module>, file bevat <assembly> en </assembly> tags die de naam van het bestand met het assemblymanifest voor het uitvoerbestand bevatten. Zie De XML-documentatiefuncties gebruiken voor voorbeelden.

Notitie

De optie DocumentationFile is van toepassing op alle bestanden in het project. Als u waarschuwingen met betrekking tot documentatieopmerkingen voor een specifiek bestand of codegedeelte wilt uitschakelen, gebruikt u #pragma waarschuwing.

Deze optie kan worden gebruikt in elk .NET SDK-project. Zie de eigenschap DocumentationFile voor meer informatie.

OutputAssembly

Met de optie OutputAssembly geeft u de naam van het uitvoerbestand op. Het uitvoerpad geeft de map aan waarin de compileruitvoer wordt geplaatst.

<OutputAssembly>folder</OutputAssembly>

Geef de volledige naam en extensie op van het bestand dat u wilt maken. Als u de naam van het uitvoerbestand niet opgeeft, gebruikt MSBuild de naam van het project om de naam van de uitvoerassembly op te geven. Voor projecten in oude stijl worden de volgende regels gebruikt:

  • Een .exe krijgt de naam van het broncodebestand met de methode of instructies Main op het hoogste niveau.
  • Een .dll of .netmodule krijgt de naam van het eerste broncodebestand.

Alle modules die als onderdeel van een compilatie worden geproduceerd, worden bestanden die zijn gekoppeld aan elke assembly die ook in de compilatie worden geproduceerd. Gebruik ildasm.exe om het assemblymanifest weer te geven om de bijbehorende bestanden te bekijken.

De optie OutputAssembly-compiler is vereist om een exe het doel van een vriendassembly-assembly te kunnen zijn.

PlatformTarget

Hiermee geeft u op welke versie van de CLR de assembly kan worden uitgevoerd.

<PlatformTarget>anycpu</PlatformTarget>
  • anycpu (standaard) compileert uw assembly om te worden uitgevoerd op elk platform. Uw toepassing wordt indien mogelijk uitgevoerd als een 64-bits proces en valt terug naar 32-bits wanneer alleen die modus beschikbaar is.
  • anycpu32bitpreferred compileert uw assembly om te worden uitgevoerd op elk platform. Uw toepassing wordt uitgevoerd in de 32-bits modus op systemen die zowel 64-bits als 32-bits toepassingen ondersteunen. U kunt deze optie alleen opgeven voor projecten die gericht zijn op .NET Framework 4.5 of hoger.
  • ARM compileert uw assembly om uit te voeren op een computer met een ADVANCED RISC Machine (ARM)-processor.
  • ARM64 compileert uw assembly om uit te voeren door de 64-bits CLR op een computer met een ARM-processor (Advanced RISC Machine) die ondersteuning biedt voor de A64-instructieset.
  • x64 compileert uw assembly die moet worden uitgevoerd door de 64-bits CLR op een computer die ondersteuning biedt voor de AMD64- of EM64T-instructieset.
  • x86 compileert uw assembly die moet worden uitgevoerd door de 32-bits, x86-compatibele CLR.
  • Itanium compileert uw assembly die moet worden uitgevoerd door de 64-bits CLR op een computer met een Itanium-processor.

Op een 64-bits Windows-besturingssysteem:

  • Assembly's die zijn gecompileerd met x86 , worden uitgevoerd op de 32-bits CLR die wordt uitgevoerd onder WOW64.
  • Een DLL die is gecompileerd met de anycpu , wordt uitgevoerd op dezelfde CLR als het proces waarin het wordt geladen.
  • Uitvoerbare bestanden die zijn gecompileerd met de anycpu worden uitgevoerd op de 64-bits CLR.
  • Uitvoerbare bestanden die zijn gecompileerd met anycpu32bitpreferred worden uitgevoerd op de 32-bits CLR.

De anycpu32bitpreferred-instelling is alleen geldig voor uitvoerbare bestanden (.EXE) en hiervoor is .NET Framework 4.5 of hoger vereist. Zie 64-bits toepassingen voor meer informatie over het ontwikkelen van een toepassing die moet worden uitgevoerd op een Windows 64-bits besturingssysteem.

U stelt de optie PlatformTarget in vanaf de pagina Build-eigenschappen voor uw project in Visual Studio.

Het gedrag van anycpu heeft enkele extra nuances in .NET Core en .NET 5 en latere versies. Wanneer u anycpu instelt, publiceert u uw app en voert u deze uit met de x86 dotnet.exe of x64dotnet.exe. Voor zelfstandige apps verpakt de dotnet publish stap het uitvoerbare bestand voor de configuratie-RID.

ProduceReferenceAssembly

Met de optie ProduceReferenceAssembly bepaalt u of de compiler referentieassembly's produceert.

<ProduceReferenceAssembly>true</ProduceReferenceAssembly>

Referentieassembly's zijn een speciaal type assembly dat alleen de minimale hoeveelheid metagegevens bevat 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. Referentieassembly's sluiten alle implementaties en declaraties van privéleden uit. Deze leden hebben geen waarneembare invloed op hun API-contract. Zie Referentieassembly's in de .NET-handleiding voor meer informatie.

De opties ProduceReferenceAssembly en ProduceOnlyReferenceAssembly sluiten elkaar wederzijds uit.

Over het algemeen hoeft u niet rechtstreeks te werken met referentieassemblybestanden. Referentieassembly's worden standaard gegenereerd in een ref submap van het tussenliggende pad (dat wil bijvoorbeeld obj/ref/). Als u ze in plaats daarvan wilt genereren onder de uitvoermap (d.w.w.v. bin/ref/) die in uw project zijn ingesteld ProduceReferenceAssemblyInOutDirtrue .

.NET SDK 6.0.200 heeft standaard een wijziging aangebracht die verwijzingsassembly's van de uitvoermap naar de tussenliggende map verplaatst.

TargetType

De optie TargetType-compiler kan worden opgegeven in een van de volgende formulieren:

  • bibliotheek: om een codebibliotheek te maken. bibliotheek is de standaardwaarde.
  • exe: om een .exe-bestand te maken.
  • module voor het maken van een module.
  • winexe om een Windows-programma te maken.
  • winmdobj om een tussenliggend .winmdobj-bestand te maken.
  • appcontainerexe voor het maken van een .exe-bestand voor Windows 8.x Store-apps.

Notitie

Voor .NET Framework-doelen, tenzij u module opgeeft, zorgt deze optie ervoor dat een .NET Framework-assemblymanifest in een uitvoerbestand wordt geplaatst. Zie Assembly's in .NET en Common Attributes voor meer informatie.

<TargetType>library</TargetType>

De compiler maakt slechts één assemblymanifest per compilatie. Informatie over alle bestanden in een compilatie wordt in het assemblymanifest geplaatst. Wanneer u meerdere uitvoerbestanden op de opdrachtregel maakt, kan er slechts één assemblymanifest worden gemaakt en moet het naar het eerste uitvoerbestand gaan dat is opgegeven op de opdrachtregel.

Als u een assembly maakt, kunt u aangeven dat alle of een deel van uw code cls-compatibel is met het CLSCompliantAttribute kenmerk.

bibliotheek

De bibliotheekoptie zorgt ervoor dat de compiler een DLL (Dynamic Link Library) maakt in plaats van een uitvoerbaar bestand (EXE). Het DLL-bestand wordt gemaakt met de .dll-extensie . Tenzij anders is opgegeven met de optie OutputAssembly , gebruikt de naam van het uitvoerbestand de naam van het eerste invoerbestand. Bij het bouwen van een .dll-bestand is een Main methode niet vereist.

Exe

De exe-optie zorgt ervoor dat de compiler een uitvoerbaar bestand (EXE) maakt, consoletoepassing. Het uitvoerbare bestand wordt gemaakt met de extensie .exe. Gebruik winexe om een uitvoerbaar Windows-programma te maken. Tenzij anders is opgegeven met de optie OutputAssembly , gebruikt de naam van het uitvoerbestand de naam van het invoerbestand dat het toegangspunt bevat (instructies op het hoogste niveau of de methode Main ). Er is slechts één toegangspunt vereist in de broncodebestanden die zijn gecompileerd in een .exe-bestand. Met de optie StartupObject Compiler kunt u opgeven welke klasse de Main methode bevat, in gevallen waarin uw code meer dan één klasse met een Main methode heeft.

module

Deze optie zorgt ervoor dat de compiler geen assemblymanifest genereert. Het uitvoerbestand dat is gemaakt door deze optie te compileren, heeft standaard de extensie .netmodule. Een bestand dat geen assemblymanifest heeft, kan niet worden geladen door de .NET-runtime. Een dergelijk bestand kan echter worden opgenomen in het assemblymanifest van een assembly met AddModules. Als er meer dan één module wordt gemaakt in één compilatie, zijn interne typen in de ene module beschikbaar voor andere modules in de compilatie. Wanneer code in de ene module verwijst naar internal typen in een andere module, moeten beide modules worden opgenomen in een assemblymanifest, met AddModules. Het maken van een module wordt niet ondersteund in de Ontwikkelomgeving van Visual Studio.

wijnxe

De winexe-optie zorgt ervoor dat de compiler een uitvoerbaar (EXE), Windows-programma maakt. Het uitvoerbare bestand wordt gemaakt met de extensie .exe. Een Windows-programma is een programma dat een gebruikersinterface biedt vanuit de .NET-bibliotheek of met de Windows-API's. Gebruik exe om een consoletoepassing te maken. Tenzij anders is opgegeven met de optie OutputAssembly , gebruikt de naam van het uitvoerbestand de naam van het invoerbestand dat de Main methode bevat. Een en slechts één Main methode is vereist in de broncodebestanden die zijn gecompileerd in een .exe-bestand. Met de optie StartupObject kunt u opgeven welke klasse de Main methode bevat, in gevallen waarin uw code meer dan één klasse met een Main methode heeft.

winmdobj

Als u de optie winmdobj gebruikt, maakt de compiler een tussenliggend .winmdobj-bestand dat u kunt converteren naar een binair Windows Runtime-bestand (.winmd). Het .winmd-bestand kan vervolgens worden gebruikt door JavaScript- en C++-programma's, naast programma's voor beheerde talen.

De winmdobj-instelling geeft aan de compiler aan dat een tussenliggende module is vereist. Het .winmdobj-bestand kan vervolgens worden ingevoerd via het WinMDExp exporthulpprogramma om een Windows-metagegevensbestand (.winmd) te produceren. Het .winmd-bestand bevat zowel de code uit de oorspronkelijke bibliotheek als de WinMD-metagegevens die worden gebruikt door JavaScript of C++ en door De Windows Runtime. De uitvoer van een bestand dat is gecompileerd met behulp van de winmdobj-compileroptie wordt alleen gebruikt als invoer voor het hulpprogramma WimMDExp-export. Er wordt niet rechtstreeks naar het .winmdobj-bestand verwezen. Tenzij u de optie OutputAssembly gebruikt, gebruikt de naam van het uitvoerbestand de naam van het eerste invoerbestand. Er Main is geen methode vereist.

appcontainerexe

Als u de appcontainerexe-compileroptie gebruikt, maakt de compiler een uitvoerbaar Windows-bestand (.exe) dat moet worden uitgevoerd in een app-container. Deze optie is gelijk aan -target:winexe , maar is ontworpen voor Windows 8.x Store-apps.

Als u wilt dat de app wordt uitgevoerd in een app-container, stelt u met deze optie een bit in het PE-bestand (Portable Executable ) in. Wanneer deze bit is ingesteld, treedt er een fout op als de methode CreateProcess probeert het uitvoerbare bestand buiten een app-container te starten. Tenzij u de optie OutputAssembly gebruikt, gebruikt de naam van het uitvoerbestand de naam van het invoerbestand dat de Main methode bevat.