Есть веб-сайт для .NET 2.0, работа с ним идёт в VS2008.
Сайт работает с веб-сервисами, и для отладки понадобилось в Release обращаться к одной версии сервиса, а в Debug - к другой. Добавил два web-reference и написал условную компиляцию типа:
#if DEBUG
DebugService...
#else
ReleaseService...
#endif
и стал искать способ задать при компиляции define. В свойствах проекта ничего похожего на опции компилятора нет в принципе.
Что обнаружилось после некоторых размышлений о природе вещей и созерцания содержимого сайта.
1) Находящийся рядом с кнопкой пуск combobox, указывающий конфигурацию Release или Debug на веб-сайт не оказывает ни малейшего действия. Связано это с тем, что сам сайт в общем-то не обязательно компилируется при разработке - он может компилироваться прямо на веб-сервере, поэтому настройки VS никак не влияют на получающийся в результате бинарник и наличие pdb-файлов с отладочной информацией.
Правильное место для конфигурирования компиляции - файл web.config. В частности, там есть элемент:
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
</configuration>
где true и false определяют Debug и Release конфигурацию сборки сайта.
2) Для определения #define DEBUG нужно добраться до ключей компилятора. Это делается элементом:
<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/d:DEBUG"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Для версий .NET выше или ниже 2.0, соответственно, нужно изменить атрибут type. Для сборки сайта в .NET 1.0 - 2.0 данный элемент должен
находиться в секции файла web.config:
<configuration>
<system.codedom>
<compilers>
<compiler ... />
</compilers>
<system.codedom>
</configuration>
Для сборки сайта в .NET 3.0 и выше данный элемент можно оставить в system.codedom или же можно поместить в секцию:
<configuration>
<system.web>
<compilation debug="true">
<compilers>
<compiler ... />
</compilers>
</compilation>
</system.web>
</configuration>