5

У меня возникли проблемы с тем, что 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

+0

Я полностью изменил свой ответ ... Проверьте это. –

ответ

5

Поскольку ASP.NET компилирует код вне вашего развития среды, он использует собственную конфигурацию сборки. Вы должны установить условный символ компиляции в свой web.config, см. Ссылку здесь: Conditional Compilation in ASP.NET 2.0

+0

То, что я сделал. В профиле конфигурации FOO я добавил символ FOO и для профиля BAR я добавил символ BAR – Earlz

+0

Странно, проблема должна лежать где-то в другом месте, вы уверены, что на самом деле вы строите с использованием правильной конфигурации? –

+0

да .. Как я уже сказал, он строит без ошибки, но затем, когда я запустил сайт asp.net, он загрузит страницу ошибки компиляции. – Earlz

Смежные вопросы