Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил? / 25 сообщений из 36, страница 1 из 2
28.05.2013, 19:00
    #38277354
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Создал компонент.
Сей компонент подключается к серверу, берёт данные в соответсвии с его правами:
Код: c#
1.
this.dtAdapter.FillByWinAuth(СчитатьWindowsЛогинЮзера())


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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
[ЕслиПрограммаЗапущенаНаВыполнение, то выполнить код:]
this.dtAdapter.FillByWinAuth(СчитатьWindowsЛогинЮзера());
[Конец]

[ВПротивномСлучаеЭтотКодВыполяется,видимо,ПрямоИзСредыРазработки]
[просто чтобы быть отображённым на форме, поэтому выполнить код:]
this.dtAdapter.Fill();
[Конец]
...
Рейтинг: 0 / 0
28.05.2013, 19:09
    #38277376
skole
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Код: c#
1.
2.
3.
4.
5.
#if(DEBUG)
RunInDebugMode();
#else
RunInReleaseMode();
#endif
...
Рейтинг: 0 / 0
28.05.2013, 19:11
    #38277380
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland,

#if DEBUG
#else
#endif
не годится ?
...
Рейтинг: 0 / 0
28.05.2013, 19:17
    #38277393
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland, директивы препроцессора здесь не помогут т.к. студия выполняет тот же код контрола, который будет выполняться на runtime этапе. На stackoverflow есть обсуждение где приводится 5 способов отличить design-time on run-time и утверждается что самый надежный это свойство LicenseManager.UsageMode .
...
Рейтинг: 0 / 0
28.05.2013, 19:18
    #38277395
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
skole
Код: c#
1.
2.
3.
4.
5.
#if(DEBUG)
RunInDebugMode();
#else
RunInReleaseMode();
#endif


очень рядом, но не то.
"DEBUG" говорит о том, объявлена ли такая переменная, или нет. Если у меня выбран режим "отладка" а не "релиз", то после запуска выполняется кусок кода после IF, в противном случае релизный..
НО
Я НЕ запускаю приложение. Я просто использую компонент. Чтобы отобразиться на форме в режиме проектирования , код внутри него выполняется. Вот и вопрос:
как отличить, находится ли проект в режиме проектирования, либо он запущен? Есть ли такой аналог глобальной переменной DEBUG?
...
Рейтинг: 0 / 0
28.05.2013, 19:19
    #38277398
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland,

добавь свою команду препроцессора. и когда надо включай её, когда надо выключай

#if MyDEBUG
#else
#endif
...
Рейтинг: 0 / 0
28.05.2013, 19:40
    #38277426
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
beg-in-erCharles Weyland,

добавь свою команду препроцессора. и когда надо включай её, когда надо выключай

#if MyDEBUG
#else
#endif
Объявил в начале эту хрень
#define DEVELOPE

и теперь мне при каждом запуске комментить эту строку?
Слишком неудобно. Крайне.
...
Рейтинг: 0 / 0
28.05.2013, 19:50
    #38277434
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
bazileCharles Weyland, директивы препроцессора здесь не помогут т.к. студия выполняет тот же код контрола, который будет выполняться на runtime этапе. На stackoverflow есть обсуждение где приводится 5 способов отличить design-time on run-time и утверждается что самый надежный это свойство LicenseManager.UsageMode .
Развёрнуто и чётко.
Спасибо, сам бы я точно не нашёл.
Решение:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
if(LicenseManager.UsageMode.ToString() == "Runtime")
{
//рантаймный код
}
else
{
//альтернативный код
}
   
...
Рейтинг: 0 / 0
28.05.2013, 19:50
    #38277435
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles WeylandСлишком неудобно. Крайне.

ну попробуй так, создай свою конфигурацию и наслаждайся

...
Рейтинг: 0 / 0
28.05.2013, 20:00
    #38277438
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland
Код: c#
1.
if(LicenseManager.UsageMode.ToString() == "Runtime")


Не надо так писать если не хочешь чтобы твой код или тебя обзывали плохими словами. Правильнее так:
Код: c#
1.
if (LicenseManager.UsageMode == LicenseUsageMode.Runtime)



P.S. Твои вопросы демонстрируют серьезные пробелы в знаниях базовых вещей относительно .NET/C#. Если ты планируешь серьезно заниматься .NET, то следует как можно быстрее эти пробелы закрыть. Рекомендую прочитать книгу "Программирование на платформе Microsoft .NET Framework 4.0 на языке C#" Джеффри Рихтера.
...
Рейтинг: 0 / 0
28.05.2013, 21:44
    #38277521
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
bazileРекомендую прочитать книгу "Программирование на платформе Microsoft .NET Framework 4.0 на языке C#" Джеффри Рихтера.
Скачал, начну с сегоднешнего дня.
...
Рейтинг: 0 / 0
28.05.2013, 22:44
    #38277573
Абсолют
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland,

а что значит в режиме разработки?
...
Рейтинг: 0 / 0
28.05.2013, 23:23
    #38277617
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
АбсолютCharles Weyland,

а что значит в режиме разработки?
а это когда я на форму компоненты кидаю.
Есть два режима:
design-time (когда я леплю форму из компонент, в т.ч. своих. Т.е это тот самый период до нажатия F5)
и
run-time (после компиляции и запуска программы. Сбсна, когда программа запущена и выполняется)
Дело в том, что если нарисовать свой компонент, то он начинает работать уже в тот момент, когда ты его на форму кидаешь. Кинул на форму - выполнился конструктор. Изменил размер компонента или любое другое его свойство - выполнились обработчики свойств, функции, запустились некоторые обработчики событий...
А раз код выполняется, то в нём и ошибки могут быть. Скажем, индекс массива вышел за пределы диапазона или деление на ноль. Тогда форма, на которой лежит этот компонент, перестаёт отображаться как нормальная форма, а вместо неё отображается что-то напоминающее web-страничку с ошибкой. Вот, пока ты эту ошибку в компоненте не исправишь, форма назад не отобразится.
Конкретно у меня проблема была в том, что в режиме разработки мой компонент пытался достучаться до сервера и по некоторым причинам не мог. В то время как в режиме работы программы он стучится без проблем. И чтобы мне видеть мою форму по-человечески и иметь возможность с ней работать, мне потребовалось, чтобы строка, выполняющая попытку доступа к серверу, не выполнялась, а просто пропускалась...

как-то так.
...
Рейтинг: 0 / 0
29.05.2013, 00:01
    #38277647
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland,

очень много букв.

у контрола есть свойство - DesignMode (ессно в рантайме проверять)
...
Рейтинг: 0 / 0
29.05.2013, 05:58
    #38277735
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
ИзопропилCharles Weyland,

очень много букв.

у контрола есть свойство - DesignMode (ессно в рантайме проверять)Не всегда есть доступ к контролу...

Проще свою статическую переменную описать. Ставить ей в начале программы в рантайме true. Для всех остальных случаев будет false: дизайнер, юниттест и т. п.

зы: DI не советую по идейным соображениям. :-)
...
Рейтинг: 0 / 0
29.05.2013, 08:47
    #38277798
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Алексей КНе всегда есть доступ к контролу...
топикстартер разве не контрол пишет?
...
Рейтинг: 0 / 0
29.05.2013, 08:58
    #38277805
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
ИзопропилАлексей КНе всегда есть доступ к контролу...
топикстартер разве не контрол пишет?Лучше иметь единый подход для контролов и неконтролов?
...
Рейтинг: 0 / 0
29.05.2013, 09:24
    #38277834
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Алексей КЛучше иметь единый подход для контролов и неконтролов?
зачем "неконтролу" эта зависимость?
...
Рейтинг: 0 / 0
29.05.2013, 09:26
    #38277836
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Алексей Кзы: DI не советую по идейным соображениям. :-)
Не уловил, DI - это что?
...
Рейтинг: 0 / 0
29.05.2013, 09:42
    #38277851
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Charles Weyland,

Dependency Injection
...
Рейтинг: 0 / 0
29.05.2013, 09:51
    #38277868
cooldeveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Алексей Кзы: DI не советую по идейным соображениям. :-)
Так, так, так...
...
Рейтинг: 0 / 0
29.05.2013, 10:27
    #38277930
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
cooldeveloperАлексей Кзы: DI не советую по идейным соображениям. :-)
Так, так, так...
забавно, но VS( и прочие среды разработки) собственно DI и используют (свойство Site интерфейса IComponent)
...
Рейтинг: 0 / 0
29.05.2013, 10:30
    #38277934
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
ИзопропилАлексей КЛучше иметь единый подход для контролов и неконтролов?
зачем "неконтролу" эта зависимость?"Чистая ViewModel" не имеет ссылки на View. Были случаи, когда она вызывается дизайнером и её поведение должно отличаться.

Ну и тестирование... Была нужда отключить систему безопасности в сервисах модели. Мне проще поставить пару if-ов в методах вроде UserContext.RoleDemand("roleName") , чем прикручивать альтернативный "проверятель" через DI.
...
Рейтинг: 0 / 0
29.05.2013, 10:30
    #38277936
cooldeveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Изопропилзабавно, но VS( и прочие среды разработки) собственно DI и используют (свойство Site интерфейса IComponent)
А как же идейные соображения?
...
Рейтинг: 0 / 0
29.05.2013, 10:35
    #38277961
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил?
Изопропилcooldeveloperпропущено...

Так, так, так...
забавно, но VS( и прочие среды разработки) собственно DI и используют (свойство Site интерфейса IComponent)Там это оправдано. Если я буду писать Visual Studio - обещаю сделать так же, несмотря на то, что некоторые обзывают ServiceProvider "абсолютным злом". :-)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / C# директивы препроцессору.. как ему сказать, чтобы он строку не компилил? / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]