Как хранить настройки программы без внешних файлов (C#)?
Нужен способ как-то записать данные настроек программы без создания внешних файлов, настройки должны быть записаны раз и навсегда в программу (через передачу в параметр при вызове программы в консоли думаю реализовать). Думал о варианте эти данные настроек держать в самом исходном коде, но как можно в код программы ещё что-то записать, что бы после выполнения с определённым параметром билд выходил с нужными настройками прописанными в коде?
Edit: Слышал о такой вещи как Source Generator, подойдёт такое для моей задачи?
Александр Ананьев, есть билд программы, и он должен быть с униукальными настройками для каждого пользователя, что бы с этими же настройками можно было запускать программу на другом компьютере и всё работало забрав на него лишь .exe
edward_freedom, думал об этом, но пользователей много, и конфигураций на сервере много будет, билд каждого пользователя должен обращаться именно к его конфигурации, а как, имя пользователя прийдётся в самом билде сохранить что бы к серверу обращаться, легче уже все конфигурации в билде хранить
Gatix, я Вам ответил в другом комментарии, а здесь задам к Вашим словам вопрос. А как Вы себе представляете процесс новых версий программы? Ведь как-бы вы не хотели, будут или ошибки, которые надо будет исправить, или важные новые функции, или трендовые хотелки, за которые клиенты и деньги будут готовы выложить итд. Ведь все эти конфигурациями, которые Вы ручками вбивать хотите - это просто ума времени и гора возможных ошибок.
Проблема решена с помощью Mono.Cecil, создаю в готовом билде класс конфига, и через другой билд, при помощи Mono.Cecil изменяю первый билд так что бы в конфиге хранились нужные данные
Вы можете хранить настройки программы в совершенно разных местах. Но если вам не нравятся конкретно файлы, то просто скройте их (в свойствах аттрибут "скрытый").
Но не надо скрывать файлы настроек, потому что, очевидно, они потребуются пользователям.
Это необычная программа, и тут использование каких либо файлов недопустимо, а к настройкам не должно быть доступа ни у кого после ввода этих самых настроек
Gatix,
Во первых, вам нужно копать в сторону inject`ов в исполняемые файлы
Во вторых, если программа находится на компьютере пользователя, то не важно как вы будете сохранять настройки, в файлах или inject`ом прямо в исполняемый файл, пользователь все равно имеет доступ в память процесса напрямую, и при должных навыках сумеет изменить настройки на нужные ему, даже если программа обфусцирована, вопрос времени)
Не совсем понятно, кто вводит эти настройки? На каждом компьютере свои? Сколько таких компьютеров? Нельзя на уровне комплиляции создавать каждому компу свою версию exe-шника? Ведь так намного проще - разные виды создаются в одном месте. После каких-либо новых функций создаётся например 100 копий этого exe. Для каждого компа - своя. От-туда и раскидывается по компам уже в готовом формате. Такой процесс можно автоматизировать. И все разные конфигурации сохраняются тоже центрально. В файле или базе данных - на усмотрение.
Если сильно извернуться, то можно сделать так, что бы какие-то произвольные данные дописывались в оверлей самого запускаемого файла, а потом оттуда вычитывалось. Как это сделать ограничено только вашей фантазией.
Что-то динамически меняющееся так естественно не получится сохранять, т.к. это просто неудобно, но что-то такое, что бы раз сохранить и забыть можно.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var server = "https://ya.ru";
var template = $@"namespace StsServerIdentity {{
public class Settings
{{
public const string Server = ""{server}"";
public const int Port = 80;
public const string User = """";
public const string Password = """";
}}
}}
";
Console.WriteLine(template);
}
}
}
Идея думаю понятная. Модифицируете под себя например добавив обработку аргументов и запускаете программу и последующий билд проекта в цикле