Erweiterte C#-Compileroptionen

Die folgenden Optionen unterstützen erweiterte Szenarien. Die neue MSBuild-Syntax wird fett formatiert dargestellt. Die ältere csc.exe-Syntax wird in code style dargestellt.

  • MainEntryPoint, StartupObject / -main: Gibt den Typ an, der den Einstiegspunkt enthält.
  • PdbFile / -pdb: Gibt den Namen der Datei mit den Debuginformationen an.
  • PathMap / -pathmap: Gibt eine Zuordnung für die Quellpfadnamen an, die vom Compiler ausgegeben werden.
  • ApplicationConfiguration / -appconfig: Gibt eine Anwendungskonfigurationsdatei mit Assemblybindungseinstellungen an.
  • AdditionalLibPaths / -lib: Gibt zusätzliche Verzeichnisse an, in denen nach Verweisen gesucht werden soll.
  • GenerateFullPaths / -fullpath: Der Compiler generiert vollqualifizierte Pfade.
  • PreferredUILang / -preferreduilang: Gibt den Namen der bevorzugten Ausgabesprache an.
  • BaseAddress / -baseaddress: Gibt die Basisadresse für die zu erstellende Bibliothek an.
  • ChecksumAlgorithm / -checksumalgorithm: Gibt den Algorithmus zur Berechnung der Quelldateiprüfsumme an, der in der PDB-Datei gespeichert ist.
  • CodePage / -codepage: Gibt die beim Öffnen von Quelldateien zu verwendende Codepage an.
  • Utf8Output / -utf8output: Gibt Compilernachrichten in UTF-8-Codierung aus.
  • FileAlignment / -filealign: Gibt die für die Ausgabedateiabschnitte verwendete Ausrichtung an.
  • ErrorEndLocation / -errorendlocation: Gibt die Zeile und Spalte der Endposition jedes Fehlers aus.
  • NoStandardLib / -nostdlib: Nicht auf die Standardbibliothek mscorlib.dll verweisen.
  • SubSystemVersion / -subsystemversion: Gibt die Subsystemversion dieser Assembly an.
  • ModuleAssemblyName / -moduleassemblyname: Der Name der Assembly, zu der dieses Modul gehört.
  • ReportIVTs / -reportivts: Zusätzliche Informationen zu System.Runtime.CompilerServices.InternalsVisibleToAttribute Informationen erstellen.

Sie fügen eine der folgenden Optionen in einem <PropertyGroup>-Element in Ihrer *.csproj-Datei hinzu:

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

MainEntryPoint oder StartupObject

Diese Option gibt die Klasse an, die den Einstiegspunkt des Programms enthält, wenn mehr als eine Klasse eine Main-Methode enthält.

<StartupObject>MyNamespace.Program</StartupObject>

oder

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Dabei ist Program der Typ, der die Main-Methode enthält. Der angegebene Klassenname muss vollqualifiziert sein. Er muss den vollständigen Namespace mit der Klasse, gefolgt von dem Klassennamen enthalten. Wenn sich die Main-Methode beispielsweise in der Program-Klasse im Namespace MyApplication.Core befindet, muss die Compileroption -main:MyApplication.Core.Program lauten. Wenn Ihre Kompilierung mehr als einen Typ mit einer Main-Methode enthält, können Sie angeben, welcher Typ die Main-Methode enthält.

Hinweis

Diese Option kann nicht für ein Projekt verwendet werden, das Anweisungen auf oberster Ebene enthält, auch wenn dieses Projekt mindestens eine Main-Methode enthält.

PdbFile

Die Compileroption PdbFile gibt den Namen und Speicherort der Debugsymboldatei an. Der Wert filename gibt den Namen und Speicherort der Debugsymboldatei an.

<PdbFile>filename</PdbFile>

Wenn Sie die Option DebugType angeben, erstellt der Compiler eine PDB-Datei im selben Verzeichnis, in dem der Compiler die Ausgabedatei (im Format .exe oder .dll) erstellt. Die PDB-Datei weist denselben Basisdateinamen wie der Name der Ausgabedatei auf. Mit der Option PdbFile können Sie einen Dateinamen und -speicherort für die PDB-Datei angeben, die nicht dem Standard entsprechen. Diese Compileroption kann nicht in der Entwicklungsumgebung von Visual Studio festgelegt oder programmgesteuert geändert werden.

PathMap

Hinweis

Wenn Sie PathMap angeben, werden Breakpoints daran gehindert, in lokalen Debugbuilds zu arbeiten. Legen Sie PathMap nur für Produktions- oder fortlaufende Integrationsbuilds fest.

Mit der Compileroption PathMap wird angegeben, wie physische Pfade den Quellpfadnamen zugeordnet werden, die vom Compiler ausgegeben werden. Bei dieser Option wird jeder physische Pfad auf dem Computer, auf dem der Compiler ausgeführt wird, einem entsprechenden Pfad zugeordnet, der in die Ausgabedateien geschrieben werden sollte. Im folgenden Beispiel ist path1 der vollständige Pfad zu den Quelldateien in der aktuellen Umgebung, und sourcePath1 ist der Quellpfad, der für path1 in Ausgabedateien ersetzt wird. Trennen Sie mehrere zugeordnete Quellpfade durch ein Komma.

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

Aus folgenden Gründen schreibt der Compiler den Quellpfad in die Ausgabe:

  1. Der Quellpfad ersetzt ein Argument, wenn das CallerFilePathAttribute auf einen optionalen Parameter angewendet wird.
  2. Der Quellpfad ist in eine PDB-Datei eingebettet.
  3. Der Pfad der PDB-Datei ist in einer PE-Datei (Portable Executable, portierbare ausführbare Datei) eingebettet.

ApplicationConfiguration

Mit der Compileroption ApplicationConfiguration kann eine C#-Anwendung den Speicherort der Anwendungskonfigurationsdatei („app.config“) der Assembly für die Common Language Runtime (CLR) zur Assemblybindungszeit angeben.

<ApplicationConfiguration>file</ApplicationConfiguration>

Dabei ist file die Anwendungskonfigurationsdatei mit den Assemblybindungseinstellungen. Eine Verwendung von ApplicationConfiguration sind erweiterte Szenarien, in denen eine Assembly sowohl auf die .NET Framework-Version als auch auf die .NET Framework für Silverlight-Version einer bestimmten Verweisassembly gleichzeitig verweisen muss. Ein in Windows Presentation Foundation (WPF) geschriebener XAML-Designer muss möglicherweise für die Benutzeroberfläche des Designers sowohl auf den WPF-Desktop als auch auf die Teilmenge von WPF, die in Silverlight enthalten ist, verweisen. Dieselbe Designerassembly muss auf beide Assembly zugreifen. Standardmäßig verursachen die separaten Verweise einen Compilerfehler, da die Assemblybindung die zwei Assemblys als Entsprechung ansieht. Mit der Compileroption ApplicationConfiguration können Sie den Speicherort einer Datei „app.config“ festlegen, die das Standardverhalten wie im folgenden Beispiel dargestellt mit dem <supportPortability>-Tag deaktiviert.

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

Der Compiler übergibt den Speicherort der Datei an die Assemblybindungslogik der CLR.

Hinweis

Fügen Sie das Eigenschaftentag <UseAppConfigForCompiler> in die CSPROJ-Datei ein, und legen Sie seinen Wert auf true fest, um die Datei „app.config“ zu verwenden, die bereits im Projekt festgelegt ist. Fügen Sie den Eigenschaftentag <AppConfigForCompiler> in die CSPROJ-Datei ein, und legen Sie dessen Wert auf den Speicherort der Datei fest, um eine andere app.config-Datei anzugeben.

In folgendem Beispiel wird eine app.config-Datei gezeigt, die es einer Anwendung ermöglicht, über Verweise sowohl auf die .NET Framework-Implementierung als auch die .NET Framework for Silverlight-Implementierung jeder .NET Framework-Assembly zu verfügen, die in beiden Implementierungen vorhanden ist. Die Compileroption ApplicationConfiguration gibt den Speicherort dieser Datei „app.config“ an.

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

AdditionalLibPaths

Die Option AdditionalLibPaths gibt den Speicherort von Assemblys an, auf die mit der Option References verwiesen wird.

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

Dabei ist dir1 ein Verzeichnis, in dem der Compiler suchen soll, wenn eine referenzierte Assembly nicht im aktuellen Arbeitsverzeichnis (dem Verzeichnis, aus dem Sie den Compiler aufrufen) oder im Systemverzeichnis der Common Language Runtime gefunden wird. dir2 ist mindestens ein zusätzliches Verzeichnis, in dem nach Assemblyverweisen gesucht werden soll. Trennen Sie Verzeichnisnamen durch ein Komma, ohne Leerzeichen zu verwenden. Der Compiler sucht in folgender Reihenfolge nach Assemblyverweisen, die nicht vollqualifiziert sind:

  1. Aktuelles Arbeitsverzeichnis
  2. Das Verzeichnis des CLR-Systems (Common Language Runtime)
  3. Durch AdditionalLibPaths angegebene Verzeichnisse.
  4. Von den LIB-Umgebungsvariablen angegebene Verzeichnisse

Verwenden Sie Reference, um einen Assemblyverweis anzugeben. AdditionalLibPaths ist additiv. Wenn diese Option mehrmals angegeben wird, wird an vorherige Werte angefügt. Da der Pfad zur abhängigen Assembly nicht im Assemblymanifest angegeben ist, wird die Anwendung die Assembly im globalen Assemblycache finden und verwenden. Der Compiler, der auf die Assembly verweist, impliziert nicht, dass die Common Language Runtime die Assembly zur Laufzeit finden und laden kann. Weitere Informationen dazu, wie die Laufzeit nach verwiesenen Assemblys sucht, finden Sie unter So sucht Common Language Runtime nach Assemblys.

GenerateFullPaths

Die Option GenerateFullPaths bewirkt, dass der Compiler beim Auflisten von Kompilierungsfehlern und -warnungen den vollständigen Pfad der Datei angibt.

<GenerateFullPaths>true</GenerateFullPaths>

Standardmäßig ist in den aus der Kompilierung resultierenden Fehler- und Warnmeldungen der Name der Datei enthalten, in der der entsprechende Fehler auftrat. Die Option GenerateFullPaths bewirkt, dass der Compiler den vollständigen Pfad der Datei angibt. Diese Compileroption steht in Visual Studio nicht zur Verfügung und kann nicht programmgesteuert geändert werden.

PreferredUILang

Mithilfe der Compileroption PreferredUILang können Sie die Sprache festlegen, in der der C#-Compiler Ausgaben anzeigt, z. B. Fehlermeldungen.

<PreferredUILang>language</PreferredUILang>

Dabei ist language der Sprachenname der Sprache, die für die Compilerausgabe verwendet wird. Sie können die Compileroption PreferredUILang verwenden, um die Sprache anzugeben, die der C#-Compiler für Fehlermeldungen und andere Befehlszeilenausgaben verwenden soll. Wenn das Language Pack für die Sprache nicht installiert ist, wird stattdessen die Spracheinstellung des Betriebssystems verwendet.

BaseAddress

Mit der Option BaseAddress können Sie die bevorzugte Basisadresse angeben, an der eine DLL geladen werden soll. Weitere Informationen zu Situationen und Gründen für die Verwendung dieser Option finden Sie in Larry Ostermans WebLog.

<BaseAddress>address</BaseAddress>

Dabei ist address die Basisadresse für die DLL. Diese Adresse kann als dezimale, hexadezimale oder oktale Zahl angegeben werden. Die Standardbasisadresse für eine DLL-Datei wird durch die Common Language Runtime von .NET festgelegt. Das niederwertige Wort in dieser Adresse wird gerundet. Wenn Sie beispielsweise den Wert 0x11110001 angeben, wird dieser auf 0x11110000 gerundet. Um das Signieren für eine DLL abzuschließen, verwenden Sie „SN.EXE“ mit der Option „-R“.

ChecksumAlgorithm

Mit dieser Option wird der Prüfsummenalgorithmus gesteuert, der zum Codieren von Quelldateien in der PDB-Datei verwendet wird.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

algorithm muss SHA1 (Standardwert) oder SHA256 sein.

CodePage

Diese Option gibt an, welche Codepage beim Kompilieren verwendet werden soll, wenn die erforderliche Seite nicht die aktuelle Standardcodepage für das System ist.

<CodePage>id</CodePage>

Dabei steht id für die ID der Codepage, die für alle Quellcodedateien in der Kompilierung verwendet werden soll. Der Compiler versucht zunächst, alle Quelldateien als UTF-8 zu interpretieren. Wenn Ihre Quellcodedateien eine andere Codierung als UTF-8 aufweisen und andere Zeichen als 7-Bit-ASCII-Zeichen verwendet werden, sollten Sie mit der Option CodePage angeben, welche Codepage verwendet werden soll. CodePage wirkt sich auf alle in der Kompilierung verwendeten Quellcodedateien aus. Weitere Informationen darüber, wie ermittelt wird, welche Codeseiten auf dem System unterstützt werden, finden Sie unter GetCPInfo.

Utf8Output

Die Option Utf8Output zeigt die Compilerausgabe mit UTF-8-Codierung an.

<Utf8Output>true</Utf8Output>

Bei einigen internationalen Konfigurationen kann die Compilerausgabe nicht ordnungsgemäß in der Konsole angezeigt werden. Verwenden Sie Utf8Output, und leiten Sie die Compilerausgabe in eine Datei um.

FileAlignment

Mit der Option FileAlignment können Sie die Größe der Abschnitte in Ihrer Ausgabedatei angeben. Gültige Werte sind 512, 1024, 2048, 4096 und 8192. Diese Werte sind in Bytes angegeben.

<FileAlignment>number</FileAlignment>

Sie legen die Option FileAlignment in den Buildeigenschaften für Ihr Projekt in Visual Studio auf der Seite Erweitert fest. Jeder Abschnitt wird nach einer Grenze ausgerichtet, die ein Vielfaches des Werts FileAlignment darstellt. Es gibt keinen festen Standardwert. Wenn FileAlignment nicht angegeben wird, wählt die Common Language Runtime zur Kompilierzeit einen Standardwert aus. Das Angeben der Abschnittsgröße wirkt sich auf die Größe der Ausgabedatei aus. Das Ändern der Größe kann möglicherweise für Programme vorteilhaft sein, die auf kleineren Geräten ausgeführt werden. Verwenden Sie DUMPBIN, um Informationen über Abschnitte in Ihrer Ausgabedatei anzuzeigen.

ErrorEndLocation

Weist den Compiler an, die Zeile und Spalte der Endposition jedes Fehlers auszugeben.

<ErrorEndLocation>true</ErrorEndLocation>

Standardmäßig schreibt der Compiler die Startposition für alle Fehler und Warnungen in die Quelle. Wenn diese Option auf TRUE festgelegt ist, schreibt der Compiler sowohl die Start- als auch die Endposition für jeden Fehler und jede Warnung.

NoStandardLib

NoStandardLib verhindert den Import der Datei „mscorlib.dll“, die den gesamten Systemnamespace definiert.

<NoStandardLib>true</NoStandardLib>

Verwenden Sie diese Option, wenn Sie Ihren eigenen Systemnamespace und die entsprechenden Objekte definieren oder erstellen möchten. Wenn Sie NoStandardLib nicht angeben, wird „mscorlib.dll“ in Ihr Programm importiert (entspricht der Angabe von <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Gibt die mindestens erforderliche Version des Subsystems an, mit der die ausführbare Datei verwendet werden kann. Meistens stellt diese Option sicher, dass die ausführbare Datei Sicherheitsfunktionen verwenden kann, die in älteren Versionen von Windows nicht verfügbar sind.

Hinweis

Verwenden Sie zum Angeben des Subsystems selbst die Compileroption TargetType.

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor gibt die mindestens erforderliche Version des Subsystems an und wird in einer Punktschreibweise für Haupt- und Nebenversionen ausgedrückt. Beispielsweise können Sie angeben, dass eine Anwendung nicht unter einem Betriebssystem ausgeführt werden kann, das älter als Windows 7 ist. Legen Sie den Wert dieser Option auf 6.01 fest, wie in der Tabelle weiter unten in diesem Artikel beschrieben. Sie geben die Werte für major und minor als ganze Zahlen an. Führende Nullen in der Version minor ändern die Version nicht, jedoch nachfolgende Nullen. 6\.1 und 6.01 verweisen z.B. auf die gleiche Version, aber 6.10 verweist auf eine andere Version. Es wird empfohlen, die Nebenversion in Form von zwei Ziffern auszudrücken, um Verwechslungen zu vermeiden.

Die folgende Tabelle enthält allgemeine Subsystemversionen von Windows.

Windows-Version Subsystemversion
Windows Server 2003 5.02
Windows Vista 6.00
Windows 7 6.01
Windows Server 2008 6.01
Windows 8 6.02

Der Standardwert der Compileroption SubsystemVersion hängt von den Bedingungen in der folgenden Liste ab:

  • Der Standardwert ist 6,02, wenn jede Compileroption in der folgenden Liste festgelegt ist:
  • Wenn Sie MSBuild verwenden, .NET Framework 4.5 als Ziel festlegen und keine der Compileroptionen verwenden, die weiter oben in der Liste angegeben sind, ist der Standardwert 6.00.
  • Der Standardwert ist 4,00, wenn keine der vorherigen Bedingungen TRUE ist.

ModuleAssemblyName

Diese Option gibt den Namen einer Assembly an, auf deren nicht öffentliche Typen eine NETMODULE-Datei zugreifen kann.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

ModuleAssemblyName sollte beim Erstellen einer NETMODULE-Datei verwendet werden und wenn die folgenden Bedingungen erfüllt sind:

  • Die NETMODULE-Datei benötigt Zugriff auf nicht öffentliche Typen in einer vorhandenen Assembly.
  • Sie kennen den Namen der Assembly, in die die NETMODULE-Datei integriert wird.
  • Die vorhandene Assembly hat der Assembly, in die NETMODULE-Datei integriert wird, Friend-Assembly-Zugriff erteilt.

Weitere Informationen zum Erstellen einer NETMODULE-Datei finden Sie unter der Option TargetType von module. Weitere Informationen finden Sie unter Friend-Assemblys.

ReportIVTs

Aktivieren oder deaktivieren Sie zusätzliche Diagnoseinformationen zu System.Runtime.CompilerServices.InternalsVisibleToAttribute, die während der Kompilierung ermittelt wurden:

<ReportIVTs>true</ReportIVTs>

Die Diagnose wird aktiviert, wenn der Elementinhalt true ist. Sie wird deaktiviert, wenn er false oder nicht vorhanden ist.

ReportIVTs meldet die folgenden Informationen, wenn das Feature aktiviert ist:

  1. Alle Diagnosen nicht zugänglicher Member enthalten ihre Quellassembly, wenn sie sich von der aktuellen Assembly unterscheiden.
  2. Der Compiler gibt die Assemblyidentität des zu kompilierenden Projekts, den Assemblynamen und den öffentlichen Schlüssel aus.
  3. Für jeden Verweis, der an den Compiler übergeben wird, wird dies gedruckt;
    1. Die Assemblyidentität des Verweises
    2. Angabe, ob der Verweis dem aktuellen Projekt InternalsVisibleTo gewährt
    3. Der Name und alle öffentlichen Schlüssel aller Assemblys, denen von dieser Assembly InternalsVisibleTo gewährt wird