Расширенные параметры компилятора C#Advanced C# compiler options

Следующие параметры поддерживают сложные сценарии.The following options support advanced scenarios. Новый синтаксис MSBuild выделен полужирным шрифтом.The new MSBuild syntax is shown in Bold. Для старого синтаксиса csc.exe используется code style.The older csc.exe syntax is shown in code style.

  • MainEntryPoint, StartupObject / -main: указание типа, который содержит точку входа.MainEntryPoint, StartupObject / -main: Specify the type that contains the entry point.
  • PdbFile / -pdb: указание имени файла с данными отладки.PdbFile / -pdb: Specify debug information file name.
  • PathMap / -pathmap: указание сопоставления для вывода компилятором имен исходных путей.PathMap / -pathmap: Specify a mapping for source path names output by the compiler.
  • ApplicationConfiguration / -appconfig: указание файла конфигурации приложения, который содержит параметры привязки сборки.ApplicationConfiguration / -appconfig: Specify an application configuration file containing assembly binding settings.
  • AdditionalLibPaths / -lib: указание дополнительных каталогов для поиска ссылок.AdditionalLibPaths / -lib: Specify additional directories to search in for references.
  • GenerateFullPaths / -fullpath: компилятор будет создавать абсолютные пути.GenerateFullPaths / -fullpath: Compiler generates fully qualified paths.
  • PreferredUILang / -preferreduilang: указание имени предпочтительного языка для вывода данных.PreferredUILang / -preferreduilang: Specify the preferred output language name.
  • BaseAddress / -baseaddress: указание базового адреса библиотеки для сборки.BaseAddress / -baseaddress: Specify the base address for the library to be built.
  • ChecksumAlgorithm / -checksumalgorithm: указание алгоритма для расчета контрольной суммы файла источника, хранящегося в PDB.ChecksumAlgorithm / -checksumalgorithm : Specify algorithm for calculating source file checksum stored in PDB.
  • CodePage / -codepage: указание кодовой страницы, используемой при открытии исходных файлов.CodePage / -codepage: Specify the codepage to use when opening source files.
  • Utf8Output / -utf8output: сообщения компилятора будут выводиться в кодировке UTF-8.Utf8Output / -utf8output: Output compiler messages in UTF-8 encoding.
  • FileAlignment / -filealign: указание выравнивания для разделов выходного файла.FileAlignment / -filealign: Specify the alignment used for output file sections.
  • ErrorEndLocation / -errorendlocation: выходные строка и столбец конечного расположения каждой ошибки.ErrorEndLocation / -errorendlocation: Output line and column of the end location of each error.
  • NoStandardLib / -nostdlib: не указывать ссылку на стандартную библиотеку mscorlib.dll.NoStandardLib / -nostdlib: Don't reference standard library mscorlib.dll.
  • SubsystemVersion / -subsystemversion: указание версии подсистемы для этой сборки.SubsystemVersion / -subsystemversion: Specify subsystem version of this assembly.
  • ModuleAssemblyName / -moduleassemblyname: имя сборки, частью которой будет этот модуль.ModuleAssemblyName / -moduleassemblyname: Name of the assembly that this module will be a part of.

MainEntryPoint или StartupObjectMainEntryPoint or StartupObject

Этот параметр определяет класс, который содержит точку входа в программу, если метод Main содержит сразу несколько классов.This option specifies the class that contains the entry point to the program, if more than one class contains a Main method.

<StartupObject>MyNamespace.Program</StartupObject>

илиor

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Где Program — это тип, содержащий метод Main.Where Program is the type that contains the Main method. Указанное имя класса должно быть полным; оно должно включать полное пространство имен, содержащее ключевое слово class, за которым следует имя класса.The provided class name must be fully qualified; it must include the full namespace containing the class, followed by the class name. Например, если метод Main находится в классе Program в пространстве имен MyApplication.Core, необходимо указать параметр компилятора -main:MyApplication.Core.Program.For example, when the Main method is located inside the Program class in the MyApplication.Core namespace, the compiler option has to be -main:MyApplication.Core.Program. Если ваша компиляция включает более одного типа с методом Main, вы можете указать, какой тип содержит метод Main.If your compilation includes more than one type with a Main method, you can specify which type contains the Main method.

Примечание

Этот параметр нельзя использовать для проекта, который включает инструкции верхнего уровня, даже если этот проект содержит один или несколько методов Main.This option can't be used for a project that includes top-level statements, even if that project contains one or more Main methods.

PdbFilePdbFile

Параметр компилятора PdbFile задает имя и расположение файла отладочных символов.The PdbFile compiler option specifies the name and location of the debug symbols file. Значение filename указывает на имя и расположение файла отладочных символов.The filename value specifies the name and location of the debug symbols file.

<PdbFile>filename</PdbFile>

Если указан DebugType, компилятор создаст PDB-файл в том же каталоге, в котором он создаст выходной файл (EXE или DLL).When you specify DebugType, the compiler will create a .pdb file in the same directory where the compiler will create the output file (.exe or .dll). PDB-файл имеет такое же базовое имя файла, что и выходной файл.The .pdb file has the same base file name as the name of the output file. С помощью параметра PdbFile можно задать имя и расположение PDB-файла, отличающееся от используемых по умолчанию.PdbFile allows you to specify a non-default file name and location for the .pdb file. Этот параметр компилятора нельзя задать в среде разработки Visual Studio или изменить программными средствами.This compiler option cannot be set in the Visual Studio development environment, nor can it be changed programmatically.

PathMapPathMap

Параметр компилятора PathMap определяет способ сопоставления компилятором физических путей и выходных имен исходных путей.The PathMap compiler option specifies how to map physical paths to source path names output by the compiler. Этот параметр сопоставляет каждый физический путь на компьютере, где выполняется компилятор, с соответствующим путем, который должен быть записан в выходные файлы.This option maps each physical path on the machine where the compiler runs to a corresponding path that should be written in the output files. В следующем примере path1 — это полный путь к исходным файлам в текущей среде, а sourcePath1 — исходный путь, подставляемый вместо path1 во всех выходных файлах.In the following example, path1 is the full path to the source files in the current environment, and sourcePath1 is the source path substituted for path1 in any output files. Чтобы указать несколько сопоставленных исходных путей, разделите их точкой с запятой.To specify multiple mapped source paths, separate each with a semicolon.

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

Компилятор записывает исходный путь в выходные данные по следующим причинам:The compiler writes the source path into its output for the following reasons:

  1. Исходный путь подставляется вместо аргумента, когда CallerFilePathAttribute применяется как необязательный параметр.The source path is substituted for an argument when the CallerFilePathAttribute is applied to an optional parameter.
  2. Исходный путь внедряется как PDB-файл.The source path is embedded in a PDB file.
  3. Путь к PDB-файлу внедряется в PE-файл (переносимый исполняемый файл).The path of the PDB file is embedded into a PE (portable executable) file.

ApplicationConfigurationApplicationConfiguration

Параметр компилятора ApplicationConfiguration позволяет приложению C# задать расположение файла конфигурации приложения сборки (app.config) в среде CLR во время привязки сборки.The ApplicationConfiguration compiler option enables a C# application to specify the location of an assembly's application configuration (app.config) file to the common language runtime (CLR) at assembly binding time.

<ApplicationConfiguration>file</ApplicationConfiguration>

Где file — это файл конфигурации приложения, содержащий параметры привязки сборки.Where file is the application configuration file that contains assembly binding settings. Один из случаев использования параметра ApplicationConfiguration — сложные сценарии, когда в сборке одновременно используются ссылки на версию .NET Framework и на версию .NET Framework для Silverlight определенной базовой сборки.One use of ApplicationConfiguration is advanced scenarios in which an assembly has to reference both the .NET Framework version and the .NET Framework for Silverlight version of a particular reference assembly at the same time. Например, для конструктора XAML, написанного в Windows Presentation Foundation (WPF), может потребоваться ссылаться на оба рабочих стола WPF, для пользовательского интерфейса конструктора и для подмножества WPF, поставляемого с Silverlight.For example, a XAML designer written in Windows Presentation Foundation (WPF) might have to reference both the WPF Desktop, for the designer's user interface, and the subset of WPF that is included with Silverlight. Одна и та же сборка конструктора имеет доступ к обеим сборкам.The same designer assembly has to access both assemblies. По умолчанию отдельные ссылки вызывают ошибку компиляции, так как привязка сборки видит две эквивалентные сборки.By default, the separate references cause a compiler error, because assembly binding sees the two assemblies as equivalent. Параметр компилятора ApplicationConfiguration позволяет указать расположение файла app.config, который отключает поведение по умолчанию с помощью тега <supportPortability>, как показано в следующем примере.The ApplicationConfiguration compiler option enables you to specify the location of an app.config file that disables the default behavior by using a <supportPortability> tag, as shown in the following example.

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

Компилятор передает расположение файла в логику с привязкой сборки среды CLR.The compiler passes the location of the file to the CLR's assembly-binding logic.

Примечание

Чтобы использовать файл app.config, уже заданный в проекте, добавьте тег свойства <UseAppConfigForCompiler> в CSPROJ-файл и задайте для него значение true.To use the app.config file that is already set in the project, add property tag <UseAppConfigForCompiler> to the .csproj file and set its value to true. Чтобы указать другой файл app.config, добавьте тег свойства <AppConfigForCompiler> и задайте в качестве его значения расположение требуемого файла.To specify a different app.config file, add property tag <AppConfigForCompiler> and set its value to the location of the file.

В следующем примере показан файл app.config, позволяющий приложению иметь ссылки на реализации .NET Framework и .NET Framework для реализации Silverlight любой сборки .NET Framework, существующей в обеих реализациях.The following example shows an app.config file that enables an application to have references to both the .NET Framework implementation and the .NET Framework for Silverlight implementation of any .NET Framework assembly that exists in both implementations. Параметр компилятора ApplicationConfiguration позволяет указать расположение этого файла app.config.The ApplicationConfiguration compiler option specifies the location of this app.config file.

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

AdditionalLibPathsAdditionalLibPaths

Параметр AdditionalLibPaths позволяет задать расположение сборок, указанных с помощью параметра References.The AdditionalLibPaths option specifies the location of assemblies referenced with the References option.

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

Где dir1 — это каталог, в котором компилятор должен искать базовую сборку, если она отсутствует в текущем рабочем каталоге (из которого был вызван компилятор) и системном каталоге среды CLR.Where dir1 is a directory for the compiler to look in if a referenced assembly isn't found in the current working directory (the directory from which you're invoking the compiler) or in the common language runtime's system directory. dir2 — это один или несколько дополнительных каталогов для поиска связанных сборок.dir2 is one or more additional directories to search in for assembly references. Имена каталогов разделяются запятыми без пробелов.Separate directory names with a comma, and without white space between them. Компилятор выполняет поиск ссылок на сборки, для которых не указано полное имя, в следующем порядке:The compiler searches for assembly references that aren't fully qualified in the following order:

  1. Текущая рабочая папка.Current working directory.
  2. Системный каталог среды CLR.The common language runtime system directory.
  3. Каталоги, указанные с помощью параметра AdditionalLibPaths.Directories specified by AdditionalLibPaths.
  4. Каталоги, указанные переменной среды LIB.Directories specified by the LIB environment variable.

Для указания ссылки на сборку используется параметр Reference.Use Reference to specify an assembly reference. AdditionalLibPaths является аддитивным,AdditionalLibPaths is additive. то есть каждое следующее указание этого параметра присоединяется к предыдущим значениям.Specifying it more than once appends to any prior values. Так как путь к зависимой сборке не указывается в манифесте сборки, приложение найдет используемую сборку в глобальном кэше сборок.Since the path to the dependent assembly isn't specified in the assembly manifest, the application will find and use the assembly in the global assembly cache. Компилятор, ссылающийся на сборку, не подразумевает, что среда CLR может найти и загрузить сборку во время выполнения.The compiler referencing the assembly doesn't imply the common language runtime can find and load the assembly at runtime. Сведения о том, как среда выполнения выполняет поиск связанных сборок, см. в разделе Обнаружение сборок в среде выполнения.See How the Runtime Locates Assemblies for details on how the runtime searches for referenced assemblies.

GenerateFullPathsGenerateFullPaths

Параметр GenerateFullPaths указывает компилятору на необходимость задавать полный путь к файлу при выводе списка ошибок и предупреждений компиляции.The GenerateFullPaths option causes the compiler to specify the full path to the file when listing compilation errors and warnings.

<GenerateFullPaths>true</GenerateFullPaths>

По умолчанию для ошибок и предупреждений, возникающих в ходе компиляции, указывается имя файла, в котором они были обнаружены.By default, errors and warnings that result from compilation specify the name of the file in which an error was found. Параметр GenerateFullPaths указывает компилятору на необходимость задать полный путь к файлу.The GenerateFullPaths option causes the compiler to specify the full path to the file. Этот параметр компилятора недоступен в Visual Studio и не может быть изменен программным способом.This compiler option is unavailable in Visual Studio and cannot be changed programmatically.

PreferredUILangPreferredUILang

С помощью параметра компилятора PreferredUILang можно указать язык, на котором компилятор C# отображает выходные данные, например сообщения об ошибках.By using the PreferredUILang compiler option, you can specify the language in which the C# compiler displays output, such as error messages.

<PreferredUILang>language</PreferredUILang>

Где language — это название языка, который будет использоваться для вывода компилятора.Where language is the language name of the language to use for compiler output. Параметр компилятора PreferredUILang можно использовать, чтобы указать язык, который компилятор C# должен использовать для сообщений об ошибках и других данных вывода командной строки.You can use the PreferredUILang compiler option to specify the language that you want the C# compiler to use for error messages and other command-line output. Если необходимый языковой пакет не установлен, вместо него используются языковые настройки операционной системы.If the language pack for the language isn't installed, the language setting of the operating system is used instead.

BaseAddressBaseAddress

Параметр BaseAddress позволяет указать предпочтительный базовый адрес для загрузки библиотеки DLL.The BaseAddress option lets you specify the preferred base address at which to load a DLL. Дополнительные сведения о случаях использования этого параметра см. в блоге Ларри Остермана (Larry Osterman).For more information about when and why to use this option, see Larry Osterman's WebLog.

<BaseAddress>address</BaseAddress>

Где address — это базовый адрес для библиотеки DLL.Where address is the base address for the DLL. Этот адрес можно задать в десятичном, шестнадцатеричном или восьмеричном формате.This address can be specified as a decimal, hexadecimal, or octal number. Базовый адрес по умолчанию для библиотеки DLL задается в среде выполнения .NET.The default base address for a DLL is set by the .NET common language runtime. Младшее слово этого адреса будет округляться,The lower-order word in this address will be rounded. например значение 0x11110001 округляется до 0x11110000.For example, if you specify 0x11110001, it will be rounded to 0x11110000. Чтобы завершить процесс подписи для библиотеки DLL, используйте файл SN. EXE с параметром -R.To complete the signing process for a DLL, use SN.EXE with the -R option.

ChecksumAlgorithmChecksumAlgorithm

Этот параметр управляет алгоритмом контрольной суммы, который используется для кодирования исходных файлов в формат PDB.This option controls the checksum algorithm we use to encode source files in the PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

Параметр algorithm должен иметь значение SHA1 (по умолчанию) или SHA256.The algorithm must be either SHA1 (default) or SHA256.

CodePageCodePage

Этот параметр позволяет указать кодовую страницу, используемую во время компиляции, если требуемая страница не является текущей кодовой страницей системы по умолчанию.This option specifies which codepage to use during compilation if the required page isn't the current default codepage for the system.

<CodePage>id</CodePage>

Где id — это идентификатор кодовой страницы, используемой для всех файлов исходного кода при компиляции.Where id is the id of the code page to use for all source code files in the compilation. Во-первых, компилятор будет пытаться интерпретировать все исходные файлы в кодировке UTF-8.The compiler will first attempt to interpret all source files as UTF-8. Если кодировка файлов исходного кода отличается от UTF-8 и использует символы, отличные от 7-разрядных символов ASCII, используйте параметр CodePage, чтобы указать нужную кодовую страницу.If your source code files are in an encoding other than UTF-8 and use characters other than 7-bit ASCII characters, use the CodePage option to specify which code page should be used. Параметр CodePage применяется ко всем файлам исходного кода, включенным в компиляцию.CodePage applies to all source code files in your compilation. Сведения о том, как найти кодовые страницы, которые поддерживаются в системе, см. на странице, посвященной функции GetCPInfo.See GetCPInfo for information on how to find which code pages are supported on your system.

Utf8OutputUtf8Output

Параметр Utf8Output отображает выходные данные компилятора в кодировке UTF-8.The Utf8Output option displays compiler output using UTF-8 encoding.

<Utf8Output>true</Utf8Output>

В некоторых конфигурациях для различных языков выходные данные компилятора некорректно отображаются в консоли.In some international configurations, compiler output cannot correctly be displayed in the console. Используйте Utf8Output и перенаправьте выходные данные компилятора в файл.Use Utf8Output and redirect compiler output to a file.

FileAlignmentFileAlignment

Параметр FileAlignment позволяет указать размер разделов в выходном файле.The FileAlignment option lets you specify the size of sections in your output file. Допустимые значения: 512, 1024, 2048, 4096 и 8192.Valid values are 512, 1024, 2048, 4096, and 8192. Эти значения указаны в байтах.These values are in bytes.

<FileAlignment>number</FileAlignment>

Параметр FileAlignment задается на странице Дополнительно в свойствах сборки проекта в Visual Studio.You set the FileAlignment option from the Advanced page of the Build properties for your project in Visual Studio. Каждый раздел выравнивается по границе, кратной значению FileAlignment.Each section will be aligned on a boundary that is a multiple of the FileAlignment value. Фиксированный размер по умолчанию не предусмотрен.There's no fixed default. Если значение FileAlignment не указано, среда CLR выбирает значение по умолчанию во время компиляции.If FileAlignment isn't specified, the common language runtime picks a default at compile time. Указанный размер раздела влияет на размер выходного файла.By specifying the section size, you affect the size of the output file. Изменение размера раздела может применяться для программ, выполняющихся на небольших устройствах.Modifying section size may be useful for programs that will run on smaller devices. Используйте DUMPBIN для просмотра информации о разделах выходного файла.Use DUMPBIN to see information about sections in your output file.

ErrorEndLocationErrorEndLocation

Указывает компилятору выводить строку и столбец конечного расположения каждой ошибки.Instructs the compiler to output line and column of the end location of each error.

<ErrorEndLocation>filename</ErrorEndLocation>

По умолчанию компилятор записывает начальное расположение в исходном коде для всех ошибок и предупреждений.By default, the compiler writes the starting location in source for all errors and warnings. Если этот параметр имеет значение True, компилятор записывает как начальное, так и конечное расположения для каждой ошибки и предупреждения.When this option is set to true, the compiler writes both the starting and end location for each error and warning.

NoStandardLibNoStandardLib

Параметр NoStandardLib запрещает импорт библиотеки mscorlib.dll, которая определяет все пространство имен System.NoStandardLib prevents the import of mscorlib.dll, which defines the entire System namespace.

<NoStandardLib>true</NoStandardLib>

Используйте этот параметр, если вы хотите определить или создать собственное пространство имен System и объекты.Use this option if you want to define or create your own System namespace and objects. Если вы не укажете параметр NoStandardLib, библиотека mscorlib.dll будет импортирована в вашу программу (как и при указании <NoStandardLib>false</NoStandardLib>).If you don't specify NoStandardLib, mscorlib.dll is imported into your program (same as specifying <NoStandardLib>false</NoStandardLib>).

SubsystemVersionSubsystemVersion

Задает минимальную версию подсистемы, в которой может выполняться исполняемый файл.Specifies the minimum version of the subsystem on which the executable file runs. Чаще всего этот параметр предоставляет исполняемому файлу возможность использовать функции безопасности, недоступные в прежних версиях Windows.Most commonly, this option ensures that the executable file can use security features that aren’t available with older versions of Windows.

Примечание

Чтобы указать саму подсистему, используйте параметр компилятора TargetType.To specify the subsystem itself, use the TargetType compiler option.

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor задает минимальную требуемую версию подсистемы (через точку записываются основная и дополнительная версии).The major.minor specify the minimum required version of the subsystem, as expressed in a dot notation for major and minor versions. Например, можно указать, что приложение не может работать в операционной системе старше Windows 7.For example, you can specify that an application can't run on an operating system that's older than Windows 7. Установите для этого параметра значение 6.01, как описано в таблице ниже в этой статье.Set the value of this option to 6.01, as the table later in this article describes. Укажите значения для параметров major и minor в виде целых чисел.You specify the values for major and minor as integers. Нули в начале версии minor не изменяют версию, нули в конце — изменяют.Leading zeroes in the minor version don't change the version, but trailing zeroes do. Например, 6.1 и 6.01 — одна версия, а 6.10 — другая.For example, 6.1 and 6.01 refer to the same version, but 6.10 refers to a different version. Рекомендуется указывать дополнительный номер версии двумя цифрами, чтобы избежать путаницы.We recommend expressing the minor version as two digits to avoid confusion.

В следующей таблице перечислены распространенные версии подсистем Windows.The following table lists common subsystem versions of Windows.

Версия WindowsWindows version Версия подсистемыSubsystem version
Windows Server 2003Windows Server 2003 5.025.02
Windows VistaWindows Vista 6.006.00
Windows 7Windows 7 6.016.01
Windows Server 2008Windows Server 2008 6.016.01
Windows 8Windows 8 6.026.02

Значение по умолчанию параметра компилятора SubsystemVersion зависит от условий в следующем списке:The default value of the SubsystemVersion compiler option depends on the conditions in the following list:

  • Значение по умолчанию — 6.02, если задан любой параметр компилятора из следующего списка.The default value is 6.02 if any compiler option in the following list is set:
  • Значение по умолчанию — 6.00, если используется средство MSBuild, приложение предназначено для .NET Framework 4.5 и не установлены параметры компилятора, определенные ранее в этом списке.The default value is 6.00 if you're using MSBuild, you're targeting .NET Framework 4.5, and you haven't set any of the compiler options that were specified earlier in this list.
  • Если ни одно из предыдущих условий не верно, значение по умолчанию — 4.00.The default value is 4.00 if none of the previous conditions are true.

ModuleAssemblyNameModuleAssemblyName

Указывает имя сборки, к отдельным типам которой может обращаться .netmodule.Specifies the name of an assembly whose non-public types a .netmodule can access.

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

Параметр ModuleAssemblyName нужно использовать при сборке .netmodule и выполнении следующих условий:ModuleAssemblyName should be used when building a .netmodule, and where the following conditions are true:

  • Для .netmodule требуется доступ к неоткрытым типам в существующей сборке.The .netmodule needs access to non-public types in an existing assembly.
  • Известно имя сборки, в которой будет создан .netmodule.You know the name of the assembly into which the .netmodule will be built.
  • Существующая сборка предоставила дружественной сборке доступ к сборке, в которую будет встроен .netmodule.The existing assembly has granted friend assembly access to the assembly into which the .netmodule will be built.

Дополнительные сведения о сборке .netmodule см. в разделе о параметре TargetType и его значении module.For more information on building a .netmodule, see TargetType option of module. Дополнительные сведения см. в разделе Дружественные сборки.For more information on friend assemblies, see Friend Assemblies.