Dela via


Avancerade C#-kompilatoralternativ

Följande alternativ stöder avancerade scenarier. Den nya MSBuild-syntaxen visas i Fetstil. Den äldre csc.exe syntaxen visas i code style.

  • MainEntryPoint, StartupObject / -main: Ange den typ som innehåller startpunkten.
  • PdbFile / -pdb: Ange filnamnet för felsökningsinformation.
  • PathMap / -pathmap: Ange en mappning för källsökvägsnamn som utdata från kompilatorn.
  • ApplicationConfiguration: Ange en programkonfigurationsfil som innehåller inställningar för sammansättningsbindning / -appconfig.
  • AdditionalLibPaths / -lib: Ange ytterligare kataloger för att söka efter referenser.
  • GenerateFullPaths / -fullpath: Kompilatorn genererar fullständigt kvalificerade sökvägar.
  • PreferredUILang / -preferreduilang: Ange önskat namn på utdataspråket.
  • BaseAddress / -baseaddress: Ange basadressen för biblioteket som ska skapas.
  • ChecksumAlgorithm / -checksumalgorithm : Ange algoritm för beräkning av källfilkontrollsumman som lagras i PDB.
  • CodePage / -codepage: Ange den kodsida som ska användas när källfiler öppnas.
  • Utf8Output / -utf8output: Utdatakompilerarmeddelanden i UTF-8-kodning.
  • FileAlignment / -filealign: Ange den justering som används för utdatafilavsnitt.
  • ErrorEndLocation / -errorendlocation: Utdataraden och kolumnen för slutplatsen för varje fel.
  • NoStandardLib / -nostdlib: Referera inte till standardbiblioteket mscorlib.dll.
  • SubsystemVersion / -subsystemversion: Ange undersystemversionen av den här sammansättningen.
  • ModuleAssemblyName / -moduleassemblyname: Namnet på den sammansättning som den här modulen ska ingå i.
  • ReportIVTs-reportivts / : Skapa ytterligare information om System.Runtime.CompilerServices.InternalsVisibleToAttribute information.

Du lägger till något av följande alternativ i ett <PropertyGroup> element i *.csproj filen:

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

MainEntryPoint eller StartupObject

Det här alternativet anger den klass som innehåller startpunkten för programmet, om mer än en klass innehåller en Main metod.

<StartupObject>MyNamespace.Program</StartupObject>

eller

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Var Program är den typ som innehåller Main metoden. Det angivna klassnamnet måste vara fullständigt kvalificerat. Det måste innehålla det fullständiga namnområdet som innehåller klassen, följt av klassnamnet. När metoden till exempel Main finns i Program klassen i MyApplication.Core namnområdet måste kompilatoralternativet vara -main:MyApplication.Core.Program. Om kompilering innehåller mer än en typ med en Main metod kan du ange vilken typ som innehåller Main metoden.

Kommentar

Det här alternativet kan inte användas för ett projekt som innehåller toppnivåinstruktioner, även om det projektet innehåller en eller flera Main metoder.

PdbFile

Alternativet PdbFile-kompilator anger namnet och platsen för filen med felsökningssymboler. Värdet filename anger namnet och platsen för filen med felsökningssymboler.

<PdbFile>filename</PdbFile>

När du anger DebugType skapar kompilatorn en .pdb-fil i samma katalog där kompilatorn skapar utdatafilen (.exe eller .dll). .pdb-filen har samma basfilnamn som namnet på utdatafilen. Med PdbFile kan du ange ett nondefault-filnamn och en plats för .pdb-filen. Det här kompilatoralternativet kan inte anges i Visual Studio-utvecklingsmiljön och kan inte heller ändras programmatiskt.

PathMap

Kommentar

Om du anger PathMap förhindras brytpunkter från att fungera i lokala felsökningsversioner. Ange endast PathMap för produktions- eller kontinuerlig integreringsversioner.

Alternativet PathMap-kompilator anger hur du mappar fysiska sökvägar till källsökvägsnamn som utdata från kompilatorn. Det här alternativet mappar varje fysisk sökväg på datorn där kompilatorn körs till en motsvarande sökväg som ska skrivas i utdatafilerna. I följande exempel path1 är den fullständiga sökvägen till källfilerna i den aktuella miljön och sourcePath1 är källsökvägen som ersätts i path1 alla utdatafiler. Om du vill ange flera mappade källsökvägar separerar du var och en med kommatecken.

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

Kompilatorn skriver källsökvägen till dess utdata av följande skäl:

  1. Källsökvägen ersätts med ett argument när CallerFilePathAttribute den tillämpas på en valfri parameter.
  2. Källsökvägen är inbäddad i en PDB-fil.
  3. Sökvägen till PDB-filen är inbäddad i en PE-fil (bärbar körbar fil).

ApplicationConfiguration

Med kompileringsalternativet ApplicationConfiguration kan ett C#-program ange platsen för en sammansättnings programkonfigurationsfil (app.config) till CLR (Common Language Runtime) vid monteringsbindningen.

<ApplicationConfiguration>file</ApplicationConfiguration>

Var file finns programkonfigurationsfilen som innehåller inställningar för sammansättningsbindning. En användning av ApplicationConfiguration är avancerade scenarier där en sammansättning måste referera till både .NET Framework-versionen och .NET Framework för Silverlight-versionen av en viss referenssammansättning på samma gång. En XAML-designer som skrivits i Windows Presentation Foundation (WPF) kan till exempel behöva referera till både WPF Desktop, designerns användargränssnitt och delmängden av WPF som ingår i Silverlight. Samma designersammansättning måste komma åt båda sammansättningarna. Som standard orsakar de separata referenserna ett kompilatorfel, eftersom sammansättningsbindningen ser de två sammansättningarna som likvärdiga. Med kompileringsalternativet ApplicationConfiguration kan du ange platsen för en app.config-fil som inaktiverar standardbeteendet med hjälp av en <supportPortability> tagg, enligt följande exempel.

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

Kompilatorn skickar filens plats till CLR:s sammansättningsbindningslogik.

Kommentar

Om du vill använda filen app.config som redan har angetts i projektet lägger du till egenskapstaggen <UseAppConfigForCompiler>i .csproj-filen och anger dess värde till true. Om du vill ange en annan app.config-fil lägger du till egenskapstaggen <AppConfigForCompiler> och anger dess värde till filens plats.

I följande exempel visas en app.config-fil som gör det möjligt för ett program att ha referenser till både .NET Framework-implementeringen och .NET Framework for Silverlight-implementeringen av alla .NET Framework-sammansättningar som finns i båda implementeringarna. Kompilatoralternativet ApplicationConfiguration anger platsen för den här app.config-filen.

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

AdditionalLibPaths

Alternativet AdditionalLibPaths anger platsen för sammansättningar som refereras till med alternativet Referenser .

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

Var dir1 finns en katalog som kompilatorn ska titta i om en refererad sammansättning inte hittas i den aktuella arbetskatalogen (katalogen som du anropar kompilatorn från) eller i systemkatalogen för Common Language Runtime. dir2 är en eller flera ytterligare kataloger att söka efter sammansättningsreferenser i. Avgränsa katalognamn med kommatecken och utan tomt utrymme mellan dem. Kompilatorn söker efter sammansättningsreferenser som inte är fullständigt kvalificerade i följande ordning:

  1. Aktuell arbetskatalog.
  2. Systemkatalogen common language runtime.
  3. Kataloger som anges av AdditionalLibPaths.
  4. Kataloger som anges av LIB-miljövariabeln.

Använd Referens för att ange en sammansättningsreferens. AdditionalLibPaths är additiv. Om du anger det mer än en gång läggs det till i tidigare värden. Eftersom sökvägen till den beroende sammansättningen inte anges i sammansättningsmanifestet hittar och använder programmet sammansättningen i den globala sammansättningscacheminnet. Kompilatorn som refererar till sammansättningen innebär inte att den vanliga språkkörningen kan hitta och läsa in sammansättningen vid körning. Mer information om hur körningen söker efter refererade sammansättningar finns i How the Runtime Locates Assemblies (Så här letar Runtime upp sammansättningar).

GenerateFullPaths

Alternativet GenerateFullPaths gör att kompilatorn anger den fullständiga sökvägen till filen när kompileringsfel och varningar visas.

<GenerateFullPaths>true</GenerateFullPaths>

Som standard anger fel och varningar som uppstår vid kompilering namnet på filen där ett fel hittades. Alternativet GenerateFullPaths gör att kompilatorn anger den fullständiga sökvägen till filen. Det här kompilatoralternativet är inte tillgängligt i Visual Studio och kan inte ändras programmatiskt.

PreferredUILang

Genom att använda kompileringsalternativet PreferredUILang kan du ange det språk där C#-kompilatorn visar utdata, till exempel felmeddelanden.

<PreferredUILang>language</PreferredUILang>

Var language är språknamnet på det språk som ska användas för kompilatorutdata. Du kan använda kompilatoralternativet PreferredUILang för att ange det språk som du vill att C#-kompilatorn ska använda för felmeddelanden och andra kommandoradsutdata. Om språkpaketet för språket inte är installerat används operativsystemets språkinställning i stället.

Baseaddress

Med alternativet BaseAddress kan du ange den primära basadress där en DLL ska läsas in. Mer information om när och varför du använder det här alternativet finns i Larry Ostermans WebLog.

<BaseAddress>address</BaseAddress>

Var address är basadressen för DLL:t. Den här adressen kan anges som ett decimaltal, hexadecimalt eller oktalt tal. Standardbasadressen för en DLL anges av .NET common language runtime. Det lägre ordet i den här adressen avrundas. Om du till exempel anger 0x11110001avrundas den till 0x11110000. Om du vill slutföra signeringsprocessen för en DLL använder du SN.EXE med alternativet -R.

ChecksumAlgorithm

Det här alternativet styr kontrollsummaalgoritmen som vi använder för att koda källfiler i PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

algorithm Måste vara antingen SHA1 (standard) eller SHA256.

Codepage

Det här alternativet anger vilken kodsida som ska användas under kompileringen om den nödvändiga sidan inte är systemets aktuella standardkodsida.

<CodePage>id</CodePage>

Var id finns ID:t för kodsidan som ska användas för alla källkodsfiler i kompileringsfilen. Kompilatorn försöker först tolka alla källfiler som UTF-8. Om dina källkodsfiler finns i en annan kodning än UTF-8 och använder andra tecken än 7-bitars ASCII-tecken använder du alternativet CodePage för att ange vilken kodsida som ska användas. CodePage gäller för alla källkodsfiler i din kompilering. Mer information om hur du hittar vilka kodsidor som stöds i systemet finns i GetCPInfo .

Utf8Output

Alternativet Utf8Output visar kompilatorutdata med UTF-8-kodning.

<Utf8Output>true</Utf8Output>

I vissa internationella konfigurationer kan kompilatorutdata inte visas korrekt i konsolen. Använd Utf8Output - och omdirigeringskompilatorutdata till en fil.

FileAlignment

Med alternativet FileAlignment kan du ange storleken på avsnitten i utdatafilen. Giltiga värden är 512, 1024, 2048, 4096 och 8192. Dessa värden finns i byte.

<FileAlignment>number</FileAlignment>

Du anger alternativet FileAlignment från sidan Avancerat i byggegenskaperna för projektet i Visual Studio. Varje avsnitt är justerat efter en gräns som är en multipel av värdet FileAlignment . Det finns ingen fast standard. Om FileAlignment inte har angetts väljer den vanliga språkkörningen ett standardvärde vid kompileringstid. Genom att ange avsnittsstorleken påverkar du utdatafilens storlek. Det kan vara användbart att ändra avsnittsstorleken för program som körs på mindre enheter. Använd DUMPBIN för att se information om avsnitt i utdatafilen.

ErrorEndLocation

Instruerar kompilatorn att mata ut rad och kolumn för slutplatsen för varje fel.

<ErrorEndLocation>true</ErrorEndLocation>

Som standard skriver kompilatorn startplatsen i källan för alla fel och varningar. När det här alternativet är inställt på true skriver kompilatorn både start- och slutplatsen för varje fel och varning.

NoStandardLib

NoStandardLib förhindrar import av mscorlib.dll, vilket definierar hela systemnamnområdet.

<NoStandardLib>true</NoStandardLib>

Använd det här alternativet om du vill definiera eller skapa ett eget systemnamnområde och objekt. Om du inte anger NoStandardLib importeras mscorlib.dll till ditt program (samma som att <NoStandardLib>false</NoStandardLib>ange ).

SubsystemVersion

Anger den lägsta versionen av det undersystem där den körbara filen körs. Oftast säkerställer det här alternativet att den körbara filen kan använda säkerhetsfunktioner som inte är tillgängliga med äldre versioner av Windows.

Kommentar

Om du vill ange själva undersystemet använder du kompilatoralternativet TargetType .

<SubsystemVersion>major.minor</SubsystemVersion>

Ange major.minor den lägsta nödvändiga versionen av undersystemet, uttryckt i en punktkommentering för större och mindre versioner. Du kan till exempel ange att ett program inte kan köras på ett operativsystem som är äldre än Windows 7. Ange värdet för det här alternativet till 6,01, vilket beskrivs i tabellen senare i den här artikeln. Du anger värdena för major och minor som heltal. Inledande nolla i minor versionen ändrar inte versionen, men avslutande nolla gör det. Till exempel refererar 6.1 och 6.01 till samma version, men 6.10 refererar till en annan version. Vi rekommenderar att du uttrycker delversionen som två siffror för att undvika förvirring.

I följande tabell visas vanliga undersystemversioner av Windows.

Windows-version Delsystemversion
Windows Server 2003 5.02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

Standardvärdet för kompileringsalternativet SubsystemVersion beror på villkoren i följande lista:

  • Standardvärdet är 6,02 om något kompilatoralternativ i följande lista anges:
  • Standardvärdet är 6.00 om du använder MSBuild, du riktar in dig på .NET Framework 4.5 och du har inte angett något av de kompilatoralternativ som angavs tidigare i den här listan.
  • Standardvärdet är 4,00 om inget av de tidigare villkoren är sanna.

ModuleAssemblyName

Anger namnet på en sammansättning vars icke-offentliga typer av .netmodule kan komma åt.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName ska användas när du skapar en .netmodule och där följande villkor är sanna:

  • .netmodule behöver åtkomst till icke-offentliga typer i en befintlig sammansättning.
  • Du vet namnet på sammansättningen som .netmodule kommer att byggas i.
  • Den befintliga sammansättningen har beviljat vänsammansättningen åtkomst till sammansättningen där .netmodule skapas.

Mer information om hur du skapar en .netmodule finns i TargetType-alternativet för modulen. Mer information om vänsammansättningar finns i Vänsammansättningar.

ReportIVTs

Aktivera eller inaktivera ytterligare diagnostikinformation om System.Runtime.CompilerServices.InternalsVisibleToAttribute hittades under kompilering:

<ReportIVTs>true</ReportIVTs>

Diagnostiken aktiveras om elementinnehållet är true, inaktiverat om false, eller inte finns.

ReportIVTs rapporterar följande information när den är aktiverad:

  1. Alla otillgänglig medlemsdiagnostik inkluderar deras källsammansättning, om den skiljer sig från den aktuella sammansättningen.
  2. Kompilatorn skriver ut sammansättningsidentiteten för projektet som kompileras, dess sammansättningsnamn och offentliga nyckel.
  3. För varje referens som skickas till kompilatorn skrivs den ut.
    1. Referensens sammansättningsidentitet
    2. Om referensen beviljar det aktuella projektet InternalsVisibleTo
    3. Namnet och alla offentliga nycklar för alla sammansättningar som beviljats InternalsVisibleTo från den här sammansättningen