Кто-нибудь знает, как получить текущую конфигурацию сборки $(Configuration)
в коде С#?
Как получить конфигурацию сборки во время выполнения?
Ответ 1
Вы не можете, не совсем. Что вы можете сделать, это определить некоторые "условные символы компиляции", если вы посмотрите на страницу "Build" настроек вашего проекта, вы можете установить их там, чтобы вы могли написать операторы #if для их проверки.
Символ отладки автоматически вводится (по умолчанию его можно отключить) для отладочных сборок.
Таким образом, вы можете написать код, подобный этому
#if DEBUG
RunMyDEBUGRoutine();
#else
RunMyRELEASERoutine();
#endif
Однако не делайте этого, если у вас нет веских причин. Приложение, которое работает по-разному между сборками отладки и выпуска, никому не нужно.
Ответ 2
Если вы выгрузите проект (в меню правой кнопки мыши) и добавьте его непосредственно перед тегом </Project>
, он сохранит файл, в котором есть ваша конфигурация. Затем вы можете прочитать это для использования в своем коде.
<Target Name="BeforeBuild">
<WriteLinesToFile File="$(OutputPath)\env.config"
Lines="$(Configuration)" Overwrite="true">
</WriteLinesToFile>
</Target>
Ответ 3
Символы условной компиляции могут использоваться для достижения этого. Вы можете определить пользовательские символы в панели "Свойства" > "Сборка" для каждого проекта и использовать директивы #if для проверки их в коде.
Пример, показывающий, как определить символ UNOEURO и как его использовать в коде.
bool isUnoeuro = false;
#if UNOEURO
isUnoeuro = true;
#endif
Ответ 4
Я не верю, что вы можете добавить, что во время компиляции в сборку, но одним из способов добиться этого было бы использование MSBuild и добавление его в файл конфигурации приложения.
См. это сообщение в блоге о том, как делать файлы конфигурации с несколькими средами, используя MSBuild - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/
В качестве альтернативы вы можете написать задачу MSBuild, которая будет редактировать определенный скомпилированный файл (ваш файл С# или VB) и выполнить этот запуск в задаче BeforeBuild
. Это было бы довольно сложно, так как вам нужно было решить, куда его вставлять в файл, но при условии, что у вас установлена какая-то токенизация, вы должны это сделать. Я также сомневаюсь, что это будет красиво!
Ответ 5
Вы можете использовать общий статический метод с условным атрибутом, чтобы установить флаг для обнаружения режима DEBUG или RELEASE. Метод SetDebugMode будет вызываться только при работе в режиме DEBUG, в противном случае он игнорируется средой выполнения.
public static class AppCompilationConfiguration
{
private static bool debugMode;
private static bool IsDebugMode()
{
SetDebugMode();
return debugMode;
}
//This method will be loaded only in the case of DEBUG mode.
//In RELEASE mode, all the calls to this method will be ignored by runtime.
[Conditional("DEBUG")]
private static void SetDebugMode()
{
debugMode = true;
}
public static string CompilationMode => IsDebugMode() ? "DEBUG" : "RELEASE";
}
Вы можете позвонить в код, как показано ниже
Console.WriteLine(AppCompilationConfiguration.CompilationMode);