Я испытываю затруднения, заставляя Visual Studio вести себя, поскольку я ожидал бы это. Я создал 2 профиля конфигурации. Каждому определили НЕЧТО символа, и другой определили ПАНЕЛЬ символа. И у меня есть этот код:
static class MyClass{
#if FOO
public static string const MyData="foo defined";
#endif
#if BAR /*yes, I know #elif would work here too.. just trying to be simple*/
public static string const MyData="bar defined";
#endif
}
и затем позже в другом файле я имею
if(MyClass.MyData=="foo defined").....
Ну, в моем приложении я получаю ошибку что MyClass. MyData не определяется.
Кроме того, если у меня есть он на профиле НЕЧТО и типе в чем-то как #error test
после #if FOO
затем это будет иметь ошибку сборки, но если я удалю это, то это создаст очень хорошо и когда я пойду для выполнения его, я получу ошибку компиляции, что MyClass не содержит определение для MyData. Кроме того, это - веб-приложение ASP.NET.
Кто-то может помочь мне выяснить, как использовать условную компиляцию? Это действует, как будто Visual Studio компилирует его правильно с символами компиляции, но каждый раз, когда веб-сервер ASP.NET выполняет его, это перекомпилировало его без любых символов... Но это просто не имеет никакого смысла, почему он сделал бы это..
Править: Не имеет значения, если я использую НЕЧТО или профиль ПАНЕЛИ, ни один из них, кажется, определяют символ MyData, как они должны.
EDIT2:
Хорошо, это важно для репродуцирования!!! Создайте новое App_Code
папка в Вашем решении и затем добавляет, что .cs файл тут же добавляет MyClass к нему. Это воспроизведет ошибку, работающую в пустом проекте. Я на самом деле упростил его вниз до просто
#if !(FOO || BAR)
#error neither foo or bar defined
#endif
Кажется, что Visual Studio не устанавливает условные символы компиляции для регулярных .cs файлов в App_Code
Поскольку ASP.NET компилирует ваш код вне среды разработки, он использует собственную конфигурацию сборки. Вы должны установить символ условной компиляции в вашем web.config, смотрите ссылку здесь: Условная компиляция в ASP.NET 2.0