Sdílet prostřednictvím


Pokročilé možnosti kompilátoru jazyka C#

Následující možnosti podporují pokročilé scénáře. Nová syntaxe nástroje MSBuild je zobrazena tučně. csc.exe Starší syntaxe je zobrazena v code style.

  • MainEntryPoint, StartupObject / -main: Zadejte typ, který obsahuje vstupní bod.
  • PdbFile / -pdb: Zadejte název souboru informací o ladění.
  • PathMap / -pathmap: Zadejte mapování názvů zdrojových cest výstup kompilátorem.
  • ApplicationConfiguration / -appconfig: Zadejte konfigurační soubor aplikace obsahující nastavení vazby sestavení.
  • AdditionalLibPaths / -lib: Zadejte další adresáře, které se mají vyhledat odkazy.
  • GenerateFullPaths / -fullpath: Kompilátor generuje plně kvalifikované cesty.
  • PreferredUILang / -preferreduilang: Zadejte upřednostňovaný název výstupního jazyka.
  • BaseAddress / -baseaddress: Zadejte základní adresu knihovny, která se má sestavit.
  • ChecksumAlgorithm / -checksumalgorithm : Zadejte algoritmus pro výpočet kontrolního součtu zdrojového souboru uloženého v PDB.
  • CodePage / -codepage: Zadejte znakovou stránku, která se má použít při otevírání zdrojových souborů.
  • Utf8Output / -utf8output: Zprávy kompilátoru výstupu v kódování UTF-8
  • FileAlignment / -filealign: Zadejte zarovnání použité pro oddíly výstupního souboru.
  • ErrorEndLocation / -errorendlocation: Výstupní řádek a sloupec koncového umístění každé chyby.
  • NoStandardLib / -nostdlib: Neodkazujte na standardní knihovnu mscorlib.dll.
  • SubsystemVersion / -subsystemversion: Zadejte verzi subsystému tohoto sestavení.
  • ModuleAssemblyName / -moduleassemblyname: Název sestavení, které bude tento modul součástí.
  • ReportIVTs-reportivts / : Vytvoří další informace o System.Runtime.CompilerServices.InternalsVisibleToAttribute informacích.

Do elementu v *.csproj souboru přidáte některou <PropertyGroup> z těchto možností:

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

MainEntryPoint nebo StartupObject

Tato možnost určuje třídu, která obsahuje vstupní bod programu, pokud více než jedna třída obsahuje metodu Main .

<StartupObject>MyNamespace.Program</StartupObject>

nebo

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Kde Program je typ, který obsahuje metodu Main . Zadaný název třídy musí být plně kvalifikovaný; musí obsahovat úplný obor názvů obsahující třídu, za kterou následuje název třídy. Například pokud Main je metoda umístěna uvnitř Program třídy v MyApplication.Core oboru názvů, musí být -main:MyApplication.Core.Programmožnost kompilátoru . Pokud kompilace obsahuje více než jeden typ s metodou Main , můžete určit, který typ obsahuje metodu Main .

Poznámka:

Tuto možnost nelze použít pro projekt, který obsahuje příkazy nejvyšší úrovně, i když tento projekt obsahuje jednu nebo více Main metod.

PdbFile

Možnost kompilátoru PdbFile určuje název a umístění souboru symbolů ladění. Hodnota filename určuje název a umístění souboru symbolů ladění.

<PdbFile>filename</PdbFile>

Když zadáte DebugType, kompilátor vytvoří soubor .pdb ve stejném adresáři, kde kompilátor vytvoří výstupní soubor (.exe nebo .dll). Soubor .pdb má stejný název základního souboru jako název výstupního souboru. Soubor PdbFile umožňuje zadat název a umístění souboru .pdb, který není nepochybný. Tuto možnost kompilátoru nelze nastavit ve vývojovém prostředí sady Visual Studio ani ji nelze změnit programově.

Mapa cesty

Poznámka:

Zadání PathMap brání zarážce v práci v místních sestaveních ladění. Nastavte pouze PathMap pro produkční nebo kontinuální integraci sestavení.

Možnost kompilátoru PathMap určuje způsob mapování fyzických cest na názvy zdrojových cest kompilátorem. Tato možnost mapuje každou fyzickou cestu na počítači, kde kompilátor běží na odpovídající cestu, která by se měla zapisovat do výstupních souborů. V následujícím příkladu path1 je úplná cesta ke zdrojovým souborům v aktuálním prostředí a sourcePath1 je zdrojová cesta nahrazena path1 ve všech výstupních souborech. Pokud chcete zadat více mapovaných zdrojových cest, oddělte je čárkou.

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

Kompilátor zapíše zdrojovou cestu do výstupu z následujících důvodů:

  1. Zdrojová cesta se nahradí argumentem při CallerFilePathAttribute použití na volitelný parametr.
  2. Zdrojová cesta je vložena do souboru PDB.
  3. Cesta k souboru PDB je vložena do souboru PE (přenosného spustitelného souboru).

ApplicationConfiguration

Možnost kompilátoru ApplicationConfiguration umožňuje aplikaci jazyka C# určit umístění souboru konfigurace aplikace sestavení (app.config) do modulu CLR (Common Language Runtime) v době vazby sestavení.

<ApplicationConfiguration>file</ApplicationConfiguration>

Kde file je konfigurační soubor aplikace, který obsahuje nastavení vazby sestavení. Jedním z použití ApplicationConfiguration je pokročilé scénáře, ve kterých sestavení musí odkazovat na verzi rozhraní .NET Framework i rozhraní .NET Framework pro verzi Silverlight konkrétního referenčního sestavení současně. Návrhář XAML napsaný ve Windows Presentation Foundation (WPF) může například muset odkazovat na desktop WPF, pro uživatelské rozhraní návrháře a podmnožinu WPF, která je součástí Silverlightu. Stejné sestavení návrháře musí přistupovat k oběma sestavením. Ve výchozím nastavení samostatné odkazy způsobují chybu kompilátoru, protože vazby sestavení vidí dvě sestavení jako ekvivalentní. Možnost kompilátoru ApplicationConfiguration umožňuje zadat umístění souboru app.config, který zakáže výchozí chování pomocí <supportPortability> značky, jak je znázorněno v následujícím příkladu.

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

Kompilátor předá umístění souboru do logiky vazby sestavení CLR.

Poznámka:

Chcete-li použít soubor app.config, který je již nastaven v projektu, přidejte značku <UseAppConfigForCompiler> vlastnosti do souboru .csproj a nastavte jeho hodnotu na true. Pokud chcete zadat jiný soubor app.config, přidejte značku <AppConfigForCompiler> vlastnosti a nastavte její hodnotu na umístění souboru.

Následující příklad ukazuje soubor app.config, který aplikaci umožňuje mít odkazy na implementaci rozhraní .NET Framework i rozhraní .NET Framework pro implementaci silverlight libovolného sestavení .NET Framework, které existuje v obou implementacích. Možnost kompilátoru ApplicationConfiguration určuje umístění tohoto souboru app.config.

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

AdditionalLibPaths

Možnost AdditionalLibPaths určuje umístění sestavení odkazovaných pomocí možnosti Odkazy.

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

Kde dir1 je adresář, ve kterém se má kompilátor podívat, pokud se odkazované sestavení nenajde v aktuálním pracovním adresáři (adresář, ze kterého kompilátor vyvoláte) nebo v systémovém adresáři modulu CLR (Common Language Runtime). dir2 je jeden nebo více dalších adresářů pro vyhledávání odkazů na sestavení. Názvy adresářů oddělte čárkou a bez mezer mezi nimi. Kompilátor hledá odkazy na sestavení, které nejsou plně kvalifikované v následujícím pořadí:

  1. Aktuální pracovní adresář
  2. Systémový adresář modulu CLR (Common Language Runtime).
  3. Adresáře určené parametrem AdditionalLibPaths.
  4. Adresáře určené proměnnou prostředí LIB.

Odkaz slouží k určení odkazu na sestavení. AdditionalLibPaths je sčítání. Když ji zadáte více než jednou, připojí se k jakýmkoli předchozím hodnotám. Vzhledem k tomu, že cesta k závislému sestavení není zadána v manifestu sestavení, aplikace najde a použije sestavení v globální mezipaměti sestavení. Kompilátor odkazující na sestavení neznamená, že modul CLR (Common Language Runtime) dokáže najít a načíst sestavení za běhu. Podívejte se, jak modul runtime vyhledá sestavení , podrobnosti o tom, jak modul runtime hledá odkazovaná sestavení.

GenerateFullPaths

Možnost GenerateFullPaths způsobí, že kompilátor při výpisu chyb kompilace a upozornění určí úplnou cestu k souboru.

<GenerateFullPaths>true</GenerateFullPaths>

Ve výchozím nastavení chyby a upozornění, které jsou výsledkem kompilace, určují název souboru, ve kterém byla nalezena chyba. Možnost GenerateFullPaths způsobí, že kompilátor určí úplnou cestu k souboru. Tato možnost kompilátoru není v sadě Visual Studio dostupná a nelze ji programově změnit.

PreferredUILang

Pomocí možnosti PreferredUILang kompilátoru můžete určit jazyk, ve kterém kompilátor jazyka C# zobrazuje výstup, například chybové zprávy.

<PreferredUILang>language</PreferredUILang>

Kde language je název jazyka jazyka, který se má použít pro výstup kompilátoru. Pomocí možnosti PreferredUILang kompilátoru můžete určit jazyk, který má kompilátor C# používat pro chybové zprávy a další výstup příkazového řádku. Pokud jazyková sada pro jazyk není nainstalovaná, použije se místo toho jazykové nastavení operačního systému.

BaseAddress

Možnost BaseAddress umožňuje určit upřednostňovanou základní adresu, pro kterou se má načíst knihovna DLL. Další informace o tom, kdy a proč použít tuto možnost, naleznete v tématu Larry Osterman WebLog.

<BaseAddress>address</BaseAddress>

Kde address je základní adresa knihovny DLL. Tuto adresu lze zadat jako desítkové, šestnáctkové nebo osmičkové číslo. Výchozí základní adresa knihovny DLL je nastavena modulem CLR (Common Language Runtime). Zaokrouhlí se slovo v tomto pořadí. Pokud zadáte 0x11110001například , je zaokrouhleno na 0x11110000. K dokončení procesu podepisování knihovny DLL použijte SN.EXE s možností -R.

Kontrolní součetAlgorithm

Tato možnost řídí algoritmus kontrolního součtu, který používáme ke kódování zdrojových souborů v souboru PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

Musí algorithm být buď SHA1 (výchozí) nebo SHA256.

CodePage

Tato možnost určuje, kterou znakovou stránku použít během kompilace, pokud požadovaná stránka není aktuální výchozí znakovou stránkou systému.

<CodePage>id</CodePage>

Kde id je ID znakové stránky, která se má použít pro všechny soubory zdrojového kódu v kompilaci. Kompilátor se nejprve pokusí interpretovat všechny zdrojové soubory jako UTF-8. Pokud jsou vaše soubory zdrojového kódu v jiném kódování než UTF-8 a používají jiné znaky než 7bitové znaky ASCII, použijte možnost CodePage určit, kterou znakovou stránku se má použít. CodePage se vztahuje na všechny soubory zdrojového kódu v kompilaci. Informace o tom, jak zjistit, které znakové stránky jsou v systému podporované, najdete v tématu GetCPInfo .

Utf8Output

Možnost Utf8Output zobrazí výstup kompilátoru pomocí kódování UTF-8.

<Utf8Output>true</Utf8Output>

V některých mezinárodních konfiguracích nejde v konzole správně zobrazit výstup kompilátoru. Použijte výstup kompilátoru Utf8Output a přesměrujte ho do souboru.

FileAlignment

Možnost FileAlignment umožňuje zadat velikost oddílů ve výstupním souboru. Platné hodnoty jsou 512, 1024, 2048, 4096 a 8192. Tyto hodnoty jsou v bajtech.

<FileAlignment>number</FileAlignment>

Nastavte možnost FileAlignment na stránce Upřesnit vlastnosti sestavení pro váš projekt v sadě Visual Studio. Každý oddíl je zarovnaný na hranici, která je násobkem hodnoty FileAlignment . Neexistuje žádné pevné výchozí nastavení. Pokud není zadaný FileAlignment , modul CLR (Common Language Runtime) vybere výchozí hodnotu v době kompilace. Zadáním velikosti oddílu ovlivníte velikost výstupního souboru. Úprava velikosti oddílu může být užitečná pro programy, které běží na menších zařízeních. Pomocí DUMPBIN můžete zobrazit informace o oddílech ve výstupním souboru.

ErrorEndLocation

Dává kompilátoru pokyn, aby výstupní řádek a sloupec koncového umístění každé chyby.

<ErrorEndLocation>true</ErrorEndLocation>

Ve výchozím nastavení kompilátor zapíše počáteční umístění ve zdroji pro všechny chyby a upozornění. Pokud je tato možnost nastavena na hodnotu true, kompilátor zapíše počáteční i koncové umístění pro každou chybu a upozornění.

NoStandardLib

NoStandardLib zabraňuje importu mscorlib.dll, který definuje celý obor názvů systému.

<NoStandardLib>true</NoStandardLib>

Tuto možnost použijte, pokud chcete definovat nebo vytvořit vlastní systémový obor názvů a objekty. Pokud nezadáte NoStandardLib, mscorlib.dll se do programu importuje (stejně jako zadání <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Určuje minimální verzi subsystému, na kterém běží spustitelný soubor. Tato možnost nejčastěji zajišťuje, že spustitelný soubor může používat funkce zabezpečení, které nejsou dostupné ve starších verzích Windows.

Poznámka:

K určení samotného subsystému použijte možnost kompilátoru TargetType .

<SubsystemVersion>major.minor</SubsystemVersion>

Zadejte major.minor minimální požadovanou verzi subsystému, jak je vyjádřeno v zápisu tečky pro hlavní a podverze. Můžete například určit, že aplikace nemůže běžet v operačním systému, který je starší než Windows 7. Nastavte hodnotu této možnosti na hodnotu 6.01, jak je popsáno dále v tomto článku. Zadáte hodnoty pro major celá čísla a minor jako celá čísla. Úvodní nuly ve minor verzi nemění verzi, ale koncové nuly dělají. Například verze 6.1 a 6.01 odkazuje na stejnou verzi, ale verze 6.10 odkazuje na jinou verzi. Podverzi doporučujeme vyjádřit jako dvě číslice, abyste se vyhnuli nejasnostem.

Následující tabulka uvádí běžné verze subsystému Windows.

Verze Windows Verze subsystému
Windows Server 2003 5.02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6,02

Výchozí hodnota možnosti kompilátoru SubsystemVersion závisí na podmínkách v následujícím seznamu:

  • Výchozí hodnota je 6.02, pokud je nastavena možnost kompilátoru v následujícím seznamu:
  • Výchozí hodnota je 6.00, pokud používáte NÁSTROJ MSBuild, cílíte na rozhraní .NET Framework 4.5 a nenastavili jste žádnou z možností kompilátoru, které byly zadány dříve v tomto seznamu.
  • Výchozí hodnota je 4,00, pokud žádná z předchozích podmínek není pravdivá.

ModuleAssemblyName

Určuje název sestavení, jehož neveřejné typy má .netmodule přístup.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName by se měl použít při sestavování .netmodule a kde platí následující podmínky:

  • . netmodule potřebuje přístup k neveřejným typům v existujícím sestavení.
  • Znáte název sestavení, do kterého bude sestaven .netmodule.
  • Stávající sestavení udělilo známému sestavení přístup k sestavení, do kterého je .netmodule se sestaví.

Další informace o sestavení .netmodule naleznete v tématu TargetType možnost modulu. Další informace o přátelských sestaveních naleznete v části Přátelská sestavení.

ReportIVTs

Povolte nebo zakažte další diagnostické informace o System.Runtime.CompilerServices.InternalsVisibleToAttribute nalezených během kompilace:

<ReportIVTs>true</ReportIVTs>

Diagnostika je povolena, pokud je trueobsah elementu zakázán, pokud falseje nebo není k dispozici.

Sestavy ReportIVTs hlásí při povolení následující informace:

  1. Jakákoli nepřístupná diagnostika členů zahrnuje zdrojové sestavení, pokud se liší od aktuálního sestavení.
  2. Kompilátor vytiskne identitu sestavení kompilovaného projektu, název sestavení a veřejný klíč.
  3. Pro každý odkaz předaný kompilátoru se vytiskne;
    1. Identita sestavení odkazu
    2. Zda odkaz uděluje aktuální projekt InternalsVisibleTo
    3. Název a všechny veřejné klíče všech sestavení udělených InternalsVisibleTo z tohoto sestavení