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

Следующие параметры поддерживают сложные сценарии. Новый синтаксис MSBuild выделен полужирным шрифтом. Для старого синтаксиса csc.exe используется code style.

  • MainEntryPoint, StartupObject / -main: указание типа, который содержит точку входа.
  • PdbFile / -pdb: указание имени файла с данными отладки.
  • PathMap / -pathmap: указание сопоставления для вывода компилятором имен исходных путей.
  • ApplicationConfiguration / -appconfig: указание файла конфигурации приложения, который содержит параметры привязки сборки.
  • AdditionalLibPaths / -lib: указание дополнительных каталогов для поиска ссылок.
  • GenerateFullPaths / -fullpath: компилятор будет создавать абсолютные пути.
  • PreferredUILang / -preferreduilang: указание имени предпочтительного языка для вывода данных.
  • BaseAddress / -baseaddress: указание базового адреса библиотеки для сборки.
  • ChecksumAlgorithm / -checksumalgorithm: указание алгоритма для расчета контрольной суммы файла источника, хранящегося в PDB.
  • CodePage / -codepage: указание кодовой страницы, используемой при открытии исходных файлов.
  • Utf8Output / -utf8output: сообщения компилятора будут выводиться в кодировке UTF-8.
  • FileAlignment / -filealign: указание выравнивания для разделов выходного файла.
  • ErrorEndLocation / -errorendlocation: выходные строка и столбец конечного расположения каждой ошибки.
  • NoStandardLib / -nostdlib: не указывать ссылку на стандартную библиотеку mscorlib.dll.
  • SubsystemVersion / -subsystemversion: указание версии подсистемы для этой сборки.
  • ModuleAssemblyName / -moduleassemblyname: имя сборки, частью которой будет этот модуль.
  • ReportIVTs-reportivts / : создание дополнительных сведений о System.Runtime.CompilerServices.InternalsVisibleToAttribute информации.

Вы добавляете любой из этих параметров в <PropertyGroup> элемент в *.csproj файле:

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

MainEntryPoint или StartupObject

Этот параметр указывает класс, содержащий точку входа в программу, если несколько классов содержат Main метод.

<StartupObject>MyNamespace.Program</StartupObject>

or

<MainEntryPoint>MyNamespace.Program</MainEntryPoint>

Где Program — это тип, содержащий метод Main. Указанное имя класса должно быть полным; оно должно включать полное пространство имен, содержащее ключевое слово class, за которым следует имя класса. Например, если метод Main находится в классе Program в пространстве имен MyApplication.Core, необходимо указать параметр компилятора -main:MyApplication.Core.Program. Если ваша компиляция включает более одного типа с методом Main, вы можете указать, какой тип содержит метод Main.

Примечание.

Этот параметр нельзя использовать для проекта, который включает инструкции верхнего уровня, даже если этот проект содержит один или несколько методов Main.

PdbFile

Параметр компилятора PdbFile задает имя и расположение файла отладочных символов. Значение filename указывает на имя и расположение файла отладочных символов.

<PdbFile>filename</PdbFile>

При указании DebugType компилятор создает PDB-файл в том же каталоге, где компилятор создает выходной файл (.exe или .dll). PDB-файл имеет такое же базовое имя файла, что и выходной файл. PdbFile позволяет указать имя файла и расположение, не относящийся к PDB-файлу. Этот параметр компилятора не может быть задан в среде разработки Visual Studio и не может быть изменен программным способом.

PathMap

Примечание.

Указание PathMap не позволит точкам останова работать в локальных сборках отладки. Задайте только PathMap для рабочих или непрерывных сборок интеграции.

Параметр компилятора PathMap определяет способ сопоставления компилятором физических путей и выходных имен исходных путей. Этот параметр сопоставляет каждый физический путь на компьютере, где выполняется компилятор, с соответствующим путем, который должен быть записан в выходные файлы. В следующем примере path1 — это полный путь к исходным файлам в текущей среде, а sourcePath1 — исходный путь, подставляемый вместо path1 во всех выходных файлах. Чтобы указать несколько сопоставленных исходных путей, разделите их запятыми.

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

Компилятор записывает исходный путь в выходные данные по следующим причинам:

  1. Исходный путь подставляется вместо аргумента, когда CallerFilePathAttribute применяется как необязательный параметр.
  2. Исходный путь внедряется как PDB-файл.
  3. Путь к PDB-файлу внедряется в PE-файл (переносимый исполняемый файл).

ApplicationConfiguration

Параметр компилятора ApplicationConfiguration позволяет приложению C# задать расположение файла конфигурации приложения сборки (app.config) в среде CLR во время привязки сборки.

<ApplicationConfiguration>file</ApplicationConfiguration>

Где file — это файл конфигурации приложения, содержащий параметры привязки сборки. Один из случаев использования параметра ApplicationConfiguration — сложные сценарии, когда в сборке одновременно используются ссылки на версию .NET Framework и на версию .NET Framework для Silverlight определенной базовой сборки. Например, для конструктора XAML, написанного в Windows Presentation Foundation (WPF), может потребоваться ссылаться на оба рабочих стола WPF, для пользовательского интерфейса конструктора и для подмножества WPF, поставляемого с Silverlight. Одна и та же сборка конструктора имеет доступ к обеим сборкам. По умолчанию отдельные ссылки вызывают ошибку компиляции, так как привязка сборки видит две эквивалентные сборки. Параметр компилятора ApplicationConfiguration позволяет указать расположение файла app.config, который отключает поведение по умолчанию с помощью тега <supportPortability>, как показано в следующем примере.

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

Компилятор передает расположение файла в логику с привязкой сборки среды CLR.

Примечание.

Чтобы использовать файл app.config, уже заданный в проекте, добавьте тег свойства <UseAppConfigForCompiler> в CSPROJ-файл и задайте для него значение true. Чтобы указать другой файл app.config, добавьте тег свойства <AppConfigForCompiler> и задайте в качестве его значения расположение требуемого файла.

В следующем примере показан файл app.config, позволяющий приложению иметь ссылки на реализации .NET Framework и .NET Framework для реализации Silverlight любой сборки .NET Framework, существующей в обеих реализациях. Параметр компилятора ApplicationConfiguration позволяет указать расположение этого файла app.config.

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

AdditionalLibPaths

Параметр AdditionalLibPaths позволяет задать расположение сборок, указанных с помощью параметра References.

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

Где dir1 — это каталог, в котором компилятор должен искать базовую сборку, если она отсутствует в текущем рабочем каталоге (из которого был вызван компилятор) и системном каталоге среды CLR. dir2 — это один или несколько дополнительных каталогов для поиска связанных сборок. Имена каталогов разделяются запятыми без пробелов. Компилятор выполняет поиск ссылок на сборки, для которых не указано полное имя, в следующем порядке:

  1. Текущая рабочая папка.
  2. Системный каталог среды CLR.
  3. Каталоги, указанные с помощью параметра AdditionalLibPaths.
  4. Каталоги, указанные переменной среды LIB.

Для указания ссылки на сборку используется параметр Reference. AdditionalLibPaths является аддитивным, то есть каждое следующее указание этого параметра присоединяется к предыдущим значениям. Так как путь к зависимой сборке не указывается в манифесте сборки, приложение найдет используемую сборку в глобальном кэше сборок. Компилятор, ссылающийся на сборку, не подразумевает, что среда CLR может найти и загрузить сборку во время выполнения. Сведения о том, как среда выполнения выполняет поиск связанных сборок, см. в разделе Обнаружение сборок в среде выполнения.

GenerateFullPaths

Параметр GenerateFullPaths указывает компилятору на необходимость задавать полный путь к файлу при выводе списка ошибок и предупреждений компиляции.

<GenerateFullPaths>true</GenerateFullPaths>

По умолчанию для ошибок и предупреждений, возникающих в ходе компиляции, указывается имя файла, в котором они были обнаружены. Параметр GenerateFullPaths указывает компилятору на необходимость задать полный путь к файлу. Этот параметр компилятора недоступен в Visual Studio и не может быть изменен программным способом.

PreferredUILang

С помощью параметра компилятора PreferredUILang можно указать язык, на котором компилятор C# отображает выходные данные, например сообщения об ошибках.

<PreferredUILang>language</PreferredUILang>

Где language — это название языка, который будет использоваться для вывода компилятора. Параметр компилятора PreferredUILang можно использовать, чтобы указать язык, который компилятор C# должен использовать для сообщений об ошибках и других данных вывода командной строки. Если необходимый языковой пакет не установлен, вместо него используются языковые настройки операционной системы.

BaseAddress

Параметр BaseAddress позволяет указать предпочтительный базовый адрес для загрузки библиотеки DLL. Дополнительные сведения о случаях использования этого параметра см. в блоге Ларри Остермана (Larry Osterman).

<BaseAddress>address</BaseAddress>

Где address — это базовый адрес для библиотеки DLL. Этот адрес можно задать в десятичном, шестнадцатеричном или восьмеричном формате. Базовый адрес по умолчанию для библиотеки DLL задается в среде выполнения .NET. Младшее слово этого адреса будет округляться, Например, если указать 0x11110001, округляется до 0x11110000. Чтобы завершить процесс подписи для библиотеки DLL, используйте файл SN. EXE с параметром -R.

ChecksumAlgorithm

Этот параметр управляет алгоритмом контрольной суммы, который используется для кодирования исходных файлов в формат PDB.

<ChecksumAlgorithm>algorithm</ChecksumAlgorithm>

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

CodePage

Этот параметр позволяет указать кодовую страницу, используемую во время компиляции, если требуемая страница не является текущей кодовой страницей системы по умолчанию.

<CodePage>id</CodePage>

Где id идентификатор кодовой страницы, используемой для всех файлов исходного кода в компиляции. Компилятор сначала пытается интерпретировать все исходные файлы как UTF-8. Если кодировка файлов исходного кода отличается от UTF-8 и использует символы, отличные от 7-разрядных символов ASCII, используйте параметр CodePage, чтобы указать нужную кодовую страницу. Параметр CodePage применяется ко всем файлам исходного кода, включенным в компиляцию. Сведения о том, как найти кодовые страницы, которые поддерживаются в системе, см. на странице, посвященной функции GetCPInfo.

Utf8Output

Параметр Utf8Output отображает выходные данные компилятора в кодировке UTF-8.

<Utf8Output>true</Utf8Output>

В некоторых международных конфигурациях выходные данные компилятора не могут отображаться в консоли. Используйте Utf8Output и перенаправьте выходные данные компилятора в файл.

FileAlignment

Параметр FileAlignment позволяет указать размер разделов в выходном файле. Допустимые значения: 512, 1024, 2048, 4096 и 8192. Эти значения указаны в байтах.

<FileAlignment>number</FileAlignment>

Параметр FileAlignment задается на странице Дополнительно в свойствах сборки проекта в Visual Studio. Каждый раздел выравнивается по границе, которая является нескольким значением FileAlignment . Фиксированный размер по умолчанию не предусмотрен. Если значение FileAlignment не указано, среда CLR выбирает значение по умолчанию во время компиляции. Указанный размер раздела влияет на размер выходного файла. Изменение размера раздела может быть полезно для программ, работающих на небольших устройствах. Используйте DUMPBIN для просмотра информации о разделах выходного файла.

ErrorEndLocation

Указывает компилятору выводить строку и столбец конечного расположения каждой ошибки.

<ErrorEndLocation>true</ErrorEndLocation>

По умолчанию компилятор записывает начальное расположение в исходном коде для всех ошибок и предупреждений. Если этот параметр имеет значение True, компилятор записывает как начальное, так и конечное расположения для каждой ошибки и предупреждения.

NoStandardLib

Параметр NoStandardLib запрещает импорт библиотеки mscorlib.dll, которая определяет все пространство имен System.

<NoStandardLib>true</NoStandardLib>

Используйте этот параметр, если вы хотите определить или создать собственное пространство имен System и объекты. Если вы не укажете параметр NoStandardLib, библиотека mscorlib.dll будет импортирована в вашу программу (как и при указании <NoStandardLib>false</NoStandardLib>).

SubsystemVersion

Задает минимальную версию подсистемы, в которой может выполняться исполняемый файл. Чаще всего этот параметр предоставляет исполняемому файлу возможность использовать функции безопасности, недоступные в прежних версиях Windows.

Примечание.

Чтобы указать саму подсистему, используйте параметр компилятора TargetType.

<SubsystemVersion>major.minor</SubsystemVersion>

major.minor задает минимальную требуемую версию подсистемы (через точку записываются основная и дополнительная версии). Например, можно указать, что приложение не может работать в операционной системе старше Windows 7. Установите для этого параметра значение 6.01, как описано в таблице ниже в этой статье. Укажите значения для параметров major и minor в виде целых чисел. Нули в начале версии minor не изменяют версию, нули в конце — изменяют. Например, 6.1 и 6.01 — одна версия, а 6.10 — другая. Рекомендуется указывать дополнительный номер версии двумя цифрами, чтобы избежать путаницы.

В следующей таблице перечислены распространенные версии подсистем Windows.

Версия Windows Версия подсистемы
Windows Server 2003 5,02
Windows Vista 6,00
Windows 7 6,01
Windows Server 2008 6,01
Windows 8 6.02

Значение по умолчанию параметра компилятора SubsystemVersion зависит от условий в следующем списке:

  • Значение по умолчанию — 6.02, если задан любой параметр компилятора в следующем списке:
  • Значение по умолчанию — 6.00, если используется средство MSBuild, приложение предназначено для .NET Framework 4.5 и не установлены параметры компилятора, определенные ранее в этом списке.
  • Если ни одно из предыдущих условий не верно, значение по умолчанию — 4.00.

ModuleAssemblyName

Указывает имя сборки, к которой неопубликованный тип может получить доступ к .netmodule .

<ModuleAssemblyName>assembly_name</ModuleAssemblyName>

Параметр ModuleAssemblyName нужно использовать при сборке .netmodule и выполнении следующих условий:

  • Netmodule должен иметь доступ к неопубликованным типам в существующей сборке.
  • Известно имя сборки, в которой будет создан .netmodule.
  • Существующая сборка предоставила дружественной сборке доступ к сборке, в которую будет встроен .netmodule.

Дополнительные сведения о сборке .netmodule см. в разделе о параметре TargetType и его значении module. Дополнительные сведения см. в разделе Дружественные сборки.

ReportIVTs

Включите или отключите дополнительные диагностические сведения о System.Runtime.CompilerServices.InternalsVisibleToAttribute найденных во время компиляции:

<ReportIVTs>true</ReportIVTs>

Диагностика включены, если содержимое trueэлемента отключено, если falseоно отсутствует.

ReportIVTs сообщает следующие сведения при включении:

  1. Любые недоступные члены диагностика включают исходную сборку, если она отличается от текущей сборки.
  2. Компилятор выводит удостоверение сборки компилируемого проекта, его имя сборки и открытый ключ.
  3. Для каждой ссылки, переданной компилятору, он печатается;
    1. Удостоверение сборки ссылки
    2. Предоставляет ли ссылка текущий проект InternalsVisibleTo
    3. Имя и все открытые ключи всех сборок, предоставленных InternalsVisibleTo этой сборкой