Zaawansowane opcje kompilatora języka C#

Poniższe opcje obsługują zaawansowane scenariusze. Nowa składnia programu MSBuild jest wyświetlana w obszarze Pogrubienie. Starsza csc.exe składnia jest wyświetlana w pliku code style.

  • MainEntryPoint, StartupObject / -main: określ typ, który zawiera punkt wejścia.
  • PdbFile / -pdb: określ nazwę pliku informacji debugowania.
  • PathMap / -pathmap: określ mapowanie nazw ścieżek źródłowych w danych wyjściowych kompilatora.
  • ApplicationConfiguration / -appconfig: określ plik konfiguracji aplikacji zawierający ustawienia powiązania zestawu.
  • AdditionalLibPaths / -lib: określ dodatkowe katalogi do wyszukiwania w poszukiwaniu odwołań.
  • GenerateFullPaths / -fullpath: Kompilator generuje w pełni kwalifikowane ścieżki.
  • PreferredUILang / -preferreduilang: określ preferowaną nazwę języka wyjściowego.
  • BaseAddress / -baseaddress: określ adres podstawowy do skompilowania biblioteki.
  • ChecksumAlgorithm / -checksumalgorithm : określ algorytm obliczania sumy kontrolnej pliku źródłowego przechowywanej w pliku PDB.
  • CodePage / -codepage: określ stronę kodową, która ma być używana podczas otwierania plików źródłowych.
  • Utf8Output / -utf8output: komunikaty kompilatora wyjściowego w kodowaniu UTF-8.
  • FileAlignment / -filealign: określ wyrównanie używane dla sekcji plików wyjściowych.
  • ErrorEndLocation / -errorendlocation: wiersz danych wyjściowych i kolumna lokalizacji końcowej każdego błędu.
  • NoStandardLib-nostdlib / : nie odwołują się do standardowej biblioteki mscorlib.dll.
  • SubsystemVersion / -subsystemversion: określ wersję podsystemu tego zestawu.
  • ModuleAssemblyName / -moduleassemblyname: nazwa zestawu, który będzie częścią tego modułu.
  • ReportIVTs-reportivts / : tworzenie dodatkowych informacji na System.Runtime.CompilerServices.InternalsVisibleToAttribute temat informacji.

Dodasz dowolną z tych opcji w elemecie <PropertyGroup>*.csproj w pliku:

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

MainEntryPoint lub StartupObject

Ta opcja określa klasę zawierającą punkt wejścia do programu, jeśli więcej niż jedna klasa zawiera metodę Main .

<StartupObject>MyNamespace.Program</StartupObject>

lub

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Gdzie Program jest typem zawierającym metodę Main . Podana nazwa klasy musi być w pełni kwalifikowana; musi zawierać pełną przestrzeń nazw zawierającą klasę, po której następuje nazwa klasy. Na przykład jeśli Main metoda znajduje się wewnątrz Program klasy w MyApplication.Core przestrzeni nazw, opcja kompilatora musi mieć wartość -main:MyApplication.Core.Program. Jeśli kompilacja zawiera więcej niż jeden typ z metodą, możesz określić, który typ zawiera metodę MainMain .

Uwaga

Tej opcji nie można użyć dla projektu, który zawiera instrukcje najwyższego poziomu, nawet jeśli ten projekt zawiera jedną lub więcej Main metod.

Plik PDB

Opcja kompilatora PdbFile określa nazwę i lokalizację pliku symboli debugowania. Wartość filename określa nazwę i lokalizację pliku symboli debugowania.

<PdbFile>filename</PdbFile>

Po określeniu parametru DebugType kompilator tworzy plik .pdb w tym samym katalogu, w którym kompilator tworzy plik wyjściowy (.exe lub .dll). Plik .pdb ma taką samą nazwę pliku podstawowego jak nazwa pliku wyjściowego. Plik PdbFile umożliwia określenie nazwy pliku i lokalizacji innej niż domyślna dla pliku .pdb. Nie można ustawić tej opcji kompilatora w środowisku programistycznym programu Visual Studio ani programowo go zmienić.

PathMap

Uwaga

Określenie pathMap uniemożliwi działanie punktów przerwania w lokalnych kompilacjach debugowania. Ustaw wartość PathMap tylko dla kompilacji produkcyjnej lub ciągłej integracji.

Opcja kompilatora PathMap określa sposób mapowania ścieżek fizycznych na nazwy ścieżek źródłowych wyjściowych przez kompilator. Ta opcja mapuje każdą ścieżkę fizyczną na maszynie, na której kompilator jest uruchamiany do odpowiedniej ścieżki, która powinna zostać zapisana w plikach wyjściowych. W poniższym przykładzie path1 jest pełna ścieżka do plików źródłowych w bieżącym środowisku i sourcePath1 jest ścieżką źródłową zastępowaną path1 w dowolnych plikach wyjściowych. Aby określić wiele mapowanych ścieżek źródłowych, należy oddzielić je przecinkami.

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

Kompilator zapisuje ścieżkę źródłową w danych wyjściowych z następujących powodów:

  1. Ścieżka źródłowa jest zastępowana argumentem, gdy CallerFilePathAttribute parametr jest stosowany do opcjonalnego parametru.
  2. Ścieżka źródłowa jest osadzona w pliku PDB.
  3. Ścieżka pliku PDB jest osadzona w pliku PE (przenośny plik wykonywalny).

Konfiguracja aplikacji

Opcja kompilatora ApplicationConfiguration umożliwia aplikacji języka C# określenie lokalizacji pliku konfiguracji aplikacji zestawu (app.config) do środowiska uruchomieniowego języka wspólnego (CLR) w czasie powiązania zestawu.

<ApplicationConfiguration>file</ApplicationConfiguration>

Gdzie file to plik konfiguracji aplikacji zawierający ustawienia powiązania zestawu. Jednym z zastosowań applicationConfiguration są zaawansowane scenariusze, w których zestaw musi odwoływać się zarówno do wersji programu .NET Framework, jak i programu .NET Framework dla wersji programu Silverlight określonego zestawu referencyjnego w tym samym czasie. Na przykład projektant XAML napisany w programie Windows Presentation Foundation (WPF) może mieć odwołanie zarówno do aplikacji WPF Desktop, jak i interfejsu użytkownika projektanta oraz podzbioru WPF dołączonego do programu Silverlight. Ten sam zestaw projektanta musi mieć dostęp do obu zestawów. Domyślnie oddzielne odwołania powodują błąd kompilatora, ponieważ powiązanie zestawu widzi dwa zestawy jako równoważne. Opcja kompilatora ApplicationConfiguration umożliwia określenie lokalizacji pliku app.config, który wyłącza domyślne zachowanie przy użyciu <supportPortability> tagu, jak pokazano w poniższym przykładzie.

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

Kompilator przekazuje lokalizację pliku do logiki powiązania zestawu CLR.

Uwaga

Aby użyć pliku app.config, który jest już ustawiony w projekcie, dodaj tag <UseAppConfigForCompiler> właściwości do pliku csproj i ustaw jego wartość na true. Aby określić inny plik app.config, dodaj tag <AppConfigForCompiler> właściwości i ustaw jego wartość na lokalizację pliku.

W poniższym przykładzie pokazano plik app.config, który umożliwia aplikacji posiadanie odwołań do implementacji programu .NET Framework i implementacji programu .NET Framework dla programu Silverlight dowolnego zestawu .NET Framework, który istnieje w obu implementacjach. Opcja kompilatora ApplicationConfiguration określa lokalizację tego pliku app.config.

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

AdditionalLibPaths

Opcja AdditionalLibPaths określa lokalizację zestawów, do których odwołuje się opcja Odwołania.

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

Gdzie dir1 jest katalogiem kompilatora do wyszukania, czy przywoływał zestaw nie znajduje się w bieżącym katalogu roboczym (katalogu, z którego jest wywoływany kompilator) lub w katalogu systemowym środowiska uruchomieniowego języka wspólnego. dir2 to co najmniej jeden dodatkowy katalog do wyszukiwania odwołań do zestawu. Rozdziel nazwy katalogów przecinkami i bez odstępu między nimi. Kompilator wyszukuje odwołania do zestawów, które nie są w pełni kwalifikowane w następującej kolejności:

  1. Bieżący katalog roboczy.
  2. Katalog systemowy środowiska uruchomieniowego języka wspólnego.
  3. Katalogi określone przez AdditionalLibPaths.
  4. Katalogi określone przez zmienną środowiskową LIB.

Użyj odwołania , aby określić odwołanie do zestawu. AdditionalLibPaths jest addytywne. Określanie go więcej niż raz dołącza do wszystkich poprzednich wartości. Ponieważ ścieżka do zestawu zależnego nie jest określona w manifeście zestawu, aplikacja znajdzie i użyje zestawu w globalnej pamięci podręcznej zestawów. Kompilator odwołujący się do zestawu nie oznacza, że środowisko uruchomieniowe języka wspólnego może znaleźć i załadować zestaw w czasie wykonywania. Zobacz Jak środowisko uruchomieniowe lokalizuje zestawy , aby uzyskać szczegółowe informacje na temat wyszukiwania w środowisku uruchomieniowym zestawów, do których istnieją odwołania.

GenerateFullPaths

Opcja GenerateFullPaths powoduje, że kompilator określi pełną ścieżkę do pliku podczas wyświetlania listy błędów kompilacji i ostrzeżeń.

<GenerateFullPaths>true</GenerateFullPaths>

Domyślnie błędy i ostrzeżenia wynikające z kompilacji określają nazwę pliku, w którym znaleziono błąd. Opcja GenerateFullPaths powoduje, że kompilator określi pełną ścieżkę do pliku. Ta opcja kompilatora jest niedostępna w programie Visual Studio i nie można jej programowo zmienić.

PreferredUILang

Korzystając z opcji kompilatora PreferredUILang , można określić język, w którym kompilator języka C# wyświetla dane wyjściowe, takie jak komunikaty o błędach.

<PreferredUILang>language</PreferredUILang>

Gdzie language to nazwa języka do użycia dla danych wyjściowych kompilatora. Możesz użyć opcji kompilatora PreferredUILang , aby określić język, który ma być używany przez kompilator języka C# dla komunikatów o błędach i innych danych wyjściowych wiersza polecenia. Jeśli pakiet językowy dla języka nie jest zainstalowany, zamiast tego jest używane ustawienie języka systemu operacyjnego.

Baseaddress

Opcja BaseAddress umożliwia określenie preferowanego adresu podstawowego, pod którym ma być załadowana biblioteka DLL. Aby uzyskać więcej informacji na temat tego, kiedy i dlaczego używać tej opcji, zobacz WebLog Larry'ego Ostermana.

<BaseAddress>address</BaseAddress>

Gdzie address jest adresem podstawowym biblioteki DLL. Ten adres może być określony jako liczba dziesiętna, szesnastkowa lub ósemkowa. Domyślny adres podstawowy biblioteki DLL jest ustawiany przez środowisko uruchomieniowe języka wspólnego platformy .NET. Słowo niższej kolejności w tym adresie zostanie zaokrąglone. Jeśli na przykład określisz 0x11110001wartość , zostanie ona zaokrąglona do 0x11110000. Aby ukończyć proces podpisywania biblioteki DLL, użyj SN.EXE z opcją -R.

Suma kontrolnaAlgorithm

Ta opcja steruje algorytmem sumy kontrolnej używanym do kodowania plików źródłowych w pliku PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

Wartość musi być (domyślnaalgorithm) lub SHA256.SHA1

Codepage

Ta opcja określa, która strona kodowa ma być używana podczas kompilacji, jeśli wymagana strona nie jest bieżącą domyślną stroną kodową systemu.

<CodePage>id</CodePage>

Gdzie id jest identyfikatorem strony kodowej, która ma być używana dla wszystkich plików kodu źródłowego w kompilacji. Kompilator najpierw próbuje zinterpretować wszystkie pliki źródłowe jako UTF-8. Jeśli pliki kodu źródłowego znajdują się w kodowaniu innym niż UTF-8 i używają znaków innych niż 7-bitowe znaki ASCII, użyj opcji CodePage , aby określić, która strona kodowa powinna być używana. Program CodePage ma zastosowanie do wszystkich plików kodu źródłowego w kompilacji. Aby uzyskać informacje na temat sposobu znajdowania obsługiwanych stron kodu w systemie, zobacz GetCPInfo .

Utf8Output

Opcja Utf8Output wyświetla dane wyjściowe kompilatora przy użyciu kodowania UTF-8.

<Utf8Output>true</Utf8Output>

W niektórych konfiguracjach międzynarodowych dane wyjściowe kompilatora nie mogą być poprawnie wyświetlane w konsoli programu . Użyj danych wyjściowych utf8Output i przekierowania kompilatora do pliku.

FileAlignment

Opcja FileAlignment umożliwia określenie rozmiaru sekcji w pliku wyjściowym. Prawidłowe wartości to 512, 1024, 2048, 4096 i 8192. Te wartości są w bajtach.

<FileAlignment>number</FileAlignment>

Należy ustawić opcję FileAlignment na stronie Zaawansowane właściwości kompilacji dla projektu w programie Visual Studio. Każda sekcja jest wyrównana do granicy, która jest wielokrotną wartością FileAlignment . Nie ma stałej wartości domyślnej. Jeśli parametr FileAlignment nie jest określony, środowisko uruchomieniowe języka wspólnego wybiera wartość domyślną w czasie kompilacji. Określając rozmiar sekcji, wpływ na rozmiar pliku wyjściowego. Modyfikowanie rozmiaru sekcji może być przydatne w przypadku programów uruchamianych na mniejszych urządzeniach. Użyj narzędzia DUMPBIN , aby wyświetlić informacje o sekcjach w pliku wyjściowym.

ErrorEndLocation

Nakazuje kompilatorowi wyprowadzenie wiersza i kolumny końcowej lokalizacji każdego błędu.

<ErrorEndLocation>true</ErrorEndLocation>

Domyślnie kompilator zapisuje lokalizację początkową w źródle dla wszystkich błędów i ostrzeżeń. Gdy ta opcja ma wartość true, kompilator zapisuje zarówno lokalizację początkową, jak i końcową dla każdego błędu i ostrzeżenia.

NoStandardLib

Element NoStandardLib uniemożliwia importowanie mscorlib.dll, które definiuje całą przestrzeń nazw systemu.

<NoStandardLib>true</NoStandardLib>

Użyj tej opcji, jeśli chcesz zdefiniować lub utworzyć własną przestrzeń nazw systemu i obiekty. Jeśli nie określisz elementu NoStandardLib, mscorlib.dll zostanie zaimportowany do programu (taki sam jak określenie ).<NoStandardLib>false</NoStandardLib>

PodsystemVersion

Określa minimalną wersję podsystemu, na którym jest uruchamiany plik wykonywalny. Najczęściej ta opcja zapewnia, że plik wykonywalny może używać funkcji zabezpieczeń, które nie są dostępne w starszych wersjach systemu Windows.

Uwaga

Aby określić sam podsystem, użyj opcji kompilatora TargetType .

<SubsystemVersion>major.minor</SubsystemVersion>

Określ major.minor minimalną wymaganą wersję podsystemu, wyrażoną w notacji kropkowej dla wersji głównych i pomocniczych. Można na przykład określić, że aplikacja nie może działać w systemie operacyjnym starszym niż Windows 7. Ustaw wartość tej opcji na 6.01, jak opisano w tabeli w dalszej części tego artykułu. Należy określić wartości i majorminor jako liczby całkowite. Wiodące zera w minor wersji nie zmieniają wersji, ale końcowe zera robią. Na przykład wersje 6.1 i 6.01 odwołują się do tej samej wersji, ale wersja 6.10 odnosi się do innej wersji. Zalecamy wyrażenie wersji pomocniczej jako dwóch cyfr, aby uniknąć pomyłek.

W poniższej tabeli wymieniono typowe wersje podsystemu systemu Windows.

Wersja dla systemu Windows Wersja podsystemu
Windows Server 2003 5.02
Windows Vista 6,00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6,02

Wartość domyślna opcji kompilatora SubsystemVersion zależy od warunków na poniższej liście:

  • Wartość domyślna to 6.02, jeśli ustawiono dowolną opcję kompilatora na poniższej liście:
  • Wartość domyślna to 6.00, jeśli używasz programu MSBuild, jest przeznaczona dla programu .NET Framework 4.5 i nie ustawiono żadnej z opcji kompilatora określonych wcześniej na tej liście.
  • Wartość domyślna to 4,00, jeśli żaden z poprzednich warunków nie jest spełniony.

ModuleAssemblyName

Określa nazwę zestawu, którego typy niepublicowe mogą uzyskiwać dostęp do modułu .netmodule .

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModułAssemblyName należy użyć podczas tworzenia modułu .netmodule i gdzie spełnione są następujące warunki:

  • Moduł .netmodule wymaga dostępu do typów niepublikacyjnych w istniejącym zestawie.
  • Znasz nazwę zestawu, w którym zostanie skompilowany moduł .netmodule.
  • Istniejący zestaw udzielił przyjaznemu zestawowi dostępu do zestawu, do którego .zostanie zbudowany moduł netmodule .

Aby uzyskać więcej informacji na temat tworzenia modułu .netmodule, zobacz Opcja TargetType modułu. Aby uzyskać więcej informacji na temat przyjaznych zestawów, zobacz Friend Assemblies (Przyjazne zestawy).

ReportIVTs

Włącz lub wyłącz dodatkowe informacje diagnostyczne dotyczące System.Runtime.CompilerServices.InternalsVisibleToAttribute odnalezionych podczas kompilacji:

<ReportIVTs>true</ReportIVTs>

Diagnostyka jest włączona, jeśli zawartość elementu to true, wyłączona, jeśli false, lub nie istnieje.

Po włączeniu funkcji ReportIVTs raporty zawierają następujące informacje:

  1. Każda niedostępna diagnostyka składowych obejmuje zestaw źródłowy, jeśli różni się od bieżącego zestawu.
  2. Kompilator wyświetla tożsamość zestawu kompilowanego projektu, jego nazwę zestawu i klucz publiczny.
  3. Dla każdego odwołania przekazanego do kompilatora drukuje;
    1. Tożsamość zestawu odwołania
    2. Czy odwołanie przyznaje bieżący projekt InternalsVisibleTo
    3. Nazwa i wszystkie klucze publiczne wszystkich zestawów przyznanych InternalsVisibleTo z tego zestawu