Директива препроцессора не может быть вставлена ​​в AND в C# - PullRequest
1 голос
/ 06 апреля 2020

Мне нужно поместить некоторый код в директиву препроцессора. такие директивы могут быть определены в разных проектах.

Моя ситуация такова:

Файл Constants.cs (который находится в проекте Proj1Dll.csproj)

#define DEV
... rest of the code

Файл Page1.cs (который находится в проекте MainProj.csproj, который ссылается на Proj1Dll)

#define SHOW_BTN

...

#if (DEV && SHOW_BTN)
  public static void Foo()
  {
    Debug.WriteLine("Both DEV and SHOW_BTN directives are defined");
  }
#endif

Такая конфигурация не работает, в том смысле, что метод Foo ( ) не является частью компиляции.

Если я проверю вместо #if (DEBUG && SHOW_BTN) все в порядке.

Есть ли способ справиться с такими директивами, когда они определены в разных проектах?

1 Ответ

0 голосов
/ 06 апреля 2020

Предполагая, что вы используете Visual Studio, вы можете go в свойствах проекта, и на вкладке Build вы увидите «Условные символы компиляции»

Поместите ваши синболы сюда, и они будут распознаны проект в ширину .

В вашем примере вы бы поставили просто DEV, если вам нужно больше одного, разделите их точкой с запятой, например DEV; SHOW_BTN

Если вы хотите, чтобы что-то было В целом, и для этого требуется только один символ, вы можете использовать менеджер конфигурации, чтобы создать новую конфигурацию специально для этой сборки и назвать ее как вам угодно - это даст вам тот же эффект. (Вот почему в вашем примере DEBUG работает)

Надеюсь, это поможет.

...