У меня возникли проблемы с тем, что Visual Studio будет вести себя так, как я ожидал. Я создал 2 профиля конфигурации. Один имеет обозначенный FOO символ, а другой имеет обозначение BAR. И у меня есть этот код:Условные символы компиляции не определены
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 не определен.
Кроме того, если у меня есть профиль FOO и введите что-то вроде #error test
после #if FOO
, тогда у него будет ошибка сборки, но если я удалю его, то он будет прекрасно строиться, и когда я его запустил, ll получить ошибку компиляции, которая MyClass не содержит определение для MyData. Кроме того, это веб-приложение ASP.Net.
Может кто-нибудь помочь мне выяснить, как использовать условную компиляцию? Он действует так, как будто Visual Studio правильно компилирует его с помощью символов компиляции, но всякий раз, когда веб-сервер ASP.Net выполняет его, он перекомпилирует его без каких-либо символов ... Но это просто не имеет никакого смысла, почему бы это сделать.
Редактировать: Не имеет значения, пользуюсь ли я профилем FOO или BAR, ни один из них, по-видимому, не определяет символ MyData, как должен.
EDIT2:
Хорошо, это важно для воспроизведения !!! Создайте новую папку App_Code
в своем решении, а затем добавьте файл .cs и добавьте к ней MyClass. Это воспроизведет ошибку, работающую в пустом проекте. Я на самом деле упрощен его вниз, чтобы просто
#if !(FOO || BAR)
#error neither foo or bar defined
#endif
Похоже, Visual Studio не устанавливает условные символы для компиляции регулярных .cs файлов внутри App_Code
Я полностью изменил свой ответ ... Проверьте это. –