Как встроить конфигурационный файл в приложение c#?

329
09 августа 2021, 14:20

По этому вопросу было много ответов, только ничего не подходит, поскольку склеивание файла лишает смысла всю программу, и я пишу в файл настройки, меняющие поведение приложения. .NET Framework 4.5.2.

В приложение должна входить эта настройка:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
</runtime>
Answer 1

Нашел одно решение, но оно довольно "грязное", смотрите сами использовать или нет.

Так как AppContext и сами переключатели появились только в версии 4.6, то 4.5.2 и меньше просто ни чего о них не знают и компилятор не позволяет использовать класс AppContext, так как приложение должно уметь запускаться на целевой версии фреймворка. Через настройки AppConfig это работает, т.к. его читает уже реальная среда исполнения, которая знает что и как с ними нужно делать.

Чтобы обойти ограничение 4.5.2 можно воспользоваться записью в реестр, но сделать запись в реестре нужно до активации формы, в методе main, иначе опция будет проигнорирована. Получится что-то такое:

static class Program
{
    [STAThread]
    static void Main()
    {
        //создаем ключ и нужные значения при запуске
        var HKLM = Registry.LocalMachine;
        var sw = HKLM.CreateSubKey(@"SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext");
        sw.SetValue("Switch.UseLegacyAccessibilityFeatures", "false");
        //активируем оконную часть приложения
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
        //удаляем ключ при завершении, чтобы не мусорить в системе,     
        //может быть лучше вынести в событие FormClosed
        HKLM.DeleteSubKey(@"SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext");
    }
}

Важно! Запись в данную ветку реестра требует повышения привилегий до уровня администратора системы и повлияет на все .NET приложения.

Ключ реестра указан для Win10x64, конфигурация сборки AnyCPU. Для других версий ОС и конфигурации сборки может потребоваться корректировка, например такая @"SOFTWARE\Microsoft\.NETFramework\AppContext". Но с этим я уже не экспериментировал.

READ ALSO
Баги при работе с клавиатурными хуками

Баги при работе с клавиатурными хуками

Есть участок кода где перехватываются клавиши и блокируются:

216
Считывание большого файла

Считывание большого файла

Появилась проблема со считыванием большого файлаИндекс массива, в который записываются строки(array[i]), останавливается на 174 и всё

112
Получить папки из быстрого доступа проводника

Получить папки из быстрого доступа проводника

Можно как то получить папки из быстрого доступа проводника?

134