Определите, выполняете ли вы в отладочном или выпустите исполняемый файл во время выполнения - PullRequest
0 голосов
/ 25 июня 2019

У меня есть библиотека, которая будет собираться и публиковаться в виде пакета nuget в режиме выпуска.

Однако для целей отладки полезно захватывать трассировки стека в различных точках.

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

Есть ли способ проверить, был ли исполняемый файл, в котором запущена dll, скомпилирован с отладкой или выпуском? Другими словами, даже если мой пакет nuget был скомпилирован с выпуском, я хочу запустить другой код в зависимости от того, был ли исполняемый файл, который используется моей библиотекой, встроен в выпуск или отладку?

1 Ответ

1 голос
/ 25 июня 2019

Строки ниже конфликтуют друг с другом:

Есть ли способ проверить, был ли исполняемый файл, в котором работает dll, скомпилирован с отладкой или выпуском? Другими словами, хотя мой нюгет пакет был скомпилирован с выпуском, я хочу запустить другой код

Обычно можно сделать что-то похожее на то, что вам нужно, используя директивы препроцессора . Это позволит вашей программе выполнять различные пути в соответствии, например, с именем конфигурации, используемой для построения проекта:

#if debug
    //Log
#endif

Однако вы, похоже, стремитесь к чему-то другому. Похоже, вы хотите изменить поведение, но сохраняете одну и ту же сборку (релиз в обоих случаях).

Для этого может быть проще иметь флаг, скажем verbose, который по умолчанию равен false, и когда он включен, он регистрирует дополнительную информацию. Это позволит вам сохранить тот же механизм сборки, но при этом будет иметь возможность регистрировать больше информации соответствующим образом.

Редактировать: Согласно вашим комментариям, я имею в виду что-то вроде этого:

В вашем коде, который вызывает nuget, у вас будет что-то вроде этого:

#if DEBUG
    var x = new NugetInstance(verbose:true...);
#else 
    var x = new NugetInstance(verbose:false...);
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...