#include в C # (условная компиляция) - PullRequest
1 голос
/ 23 апреля 2010

Возможно ли в C # установить такое условие, что если условие истинно - скомпилировать один файл; если условие ложно - скомпилировать другой файл?

Вроде как

#ifdef DEBUG
#include Class1.cs
#else
#include Class2.cs
#endif

Или, возможно, настроить его в свойствах проекта.

Ответы [ 4 ]

6 голосов
/ 23 апреля 2010

Нет, это не так.

Однако вы можете заключить оба файла в блоки #if.

Возможно, вы также захотите взглянуть на [Conditional]атрибут .

2 голосов
/ 23 апреля 2010

Я бы не рекомендовал это.Мне не нравится идея, что Debug и Release имеют настолько сильно отличающийся код, что вам нужно иметь два совершенно отдельных файла, чтобы понять различия.#if DEBUG вообще - довольно большой запах кода IMO ...

Однако, вы могли бы сделать это так:

// Class1.cs
#if DEBUG

...

#endif

.

// Class2.cs
#if !DEBUG

...

#endif
1 голос
/ 23 апреля 2010

В C # мы не используем включение файла, но вы можете использовать условные методы.

Например, если я разрабатываю игру, я использую базу общего кода для своего вводакласс, но я хочу, чтобы один метод вызывался, если я на Xbox, и другой метод вызывался, если я на Zune.Он по-прежнему будет возвращать тот же класс входных данных, но для его получения потребуется совсем другой маршрут.

Подробнее об условных методах вы узнаете здесь: http://msdn.microsoft.com/en-us/library/aa288458(v=VS.71).aspx

0 голосов
/ 23 апреля 2010

К счастью, нет, не в препроцессоре, как это. Однако вы можете исключить реализацию целого файла в самом файле. Или вы можете настроить процесс сборки с помощью MSBuild или nAnt, чтобы переключаться между нашими файлами.

...