Как получить конфигурацию сборки во время выполнения? - PullRequest
10 голосов
/ 06 мая 2009

Кто-нибудь знает, как получить текущую конфигурацию сборки $(Configuration) в коде C #?

Ответы [ 5 ]

15 голосов
/ 06 мая 2009

Вы не можете, не совсем. Что вы можете сделать, это определить некоторые «условные символы компиляции», если вы посмотрите на страницу «Build» настроек вашего проекта, вы можете установить их там, чтобы вы могли написать операторы #if для их проверки.

Символ отладки автоматически вводится (по умолчанию его можно отключить) для отладочных сборок.

Таким образом, вы можете написать код, подобный этому

#if DEBUG
        RunMyDEBUGRoutine();
#else
        RunMyRELEASERoutine();
#endif

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

14 голосов
/ 12 января 2010

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

<Target Name="BeforeBuild">
    <WriteLinesToFile File="$(OutputPath)\env.config" 
                      Lines="$(Configuration)" Overwrite="true">
    </WriteLinesToFile>
</Target>
6 голосов
/ 16 апреля 2014

Условные символы компиляции могут быть использованы для достижения этой цели. Вы можете определить пользовательские символы в панели «Свойства»> «Настройки сборки» для каждого проекта и использовать директивы #if для проверки их в коде.

Пример, показывающий, как определить символ UNOEURO и как использовать его в коде.

UNOEURO symbol defined here

bool isUnoeuro = false;
#if UNOEURO
    isUnoeuro = true;
#endif
0 голосов
/ 24 мая 2019

Вы можете использовать общий статический метод с условным атрибутом, чтобы установить флаг для обнаружения режима 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);
0 голосов
/ 06 мая 2009

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

См. Этот пост в блоге о том, как создавать конфигурационные файлы для нескольких сред с помощью MSBuild - http://adeneys.wordpress.com/2009/04/17/multi-environment-config/

В качестве альтернативы вы можете написать задачу MSBuild, которая отредактирует определенный скомпилированный файл (ваш файл C # или VB) и запустит его в задаче BeforeBuild. Это было бы довольно сложно, так как вам нужно было бы решить, куда вставить его в файл, но, если у вас настроен какой-то токенизация, вы сможете это сделать. Я также сомневаюсь, что это было бы красиво!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...