Вопрос

Я пишу настольное приложение, которому нужен простой уровень персистентности. Я узнал о SubSonic и его возможности работать с SQLite.Однако мне нужно сохранить файл базы данных в папке AppData пользователя, и я не знаю, как поместить такое значение в app.config — я не хочу использовать абсолютные пути.

Может ли app.config каким-либо образом получить доступ к переменным среды или ссылаться на папку данных приложения?

Это было полезно?

Решение

Невозможно указать папку AppData в файле app.config для строки подключения.

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

Другие советы

Для subsonic v2.x я бы проигнорировал строку подключения app.config и просто установил ее во время выполнения перед работой с базой данных.Имя провайдера, конечно, останется прежним.

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Northwind.db3");

DataService.Providers["Northwind"].DefaultConnectionString =
            String.Format(@"Data Source={0};Version=3;New=False;Connection Timeout=3", dbPath);

«Структурный способ» поиска данных приложения — использовать Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).

Это позволит найти правильный путь к данным приложения независимо от платформы.

Если вы используете ASP.NET, на любом языке есть несколько способов.

Server.MapPath("~") вернет корень приложения в виде полного пути, после чего вы можете просто добавить к нему "/app_data", чтобы получить полный путь.

В качестве альтернативы проверьте httpcontext.current.request и httpcontext.current.application Существует множество (и гораздо лучше, чем то, что я только что упомянул), которые обеспечат вам одну и ту же папку - корень приложения, как и полный путь.

Обратите внимание, что все это должно работать, даже если у вас есть приложение в виде виртуальной папки и обычная папка с приложением, настроенным в IIS для этой папки.

Однако это возможно только во время выполнения, поэтому об этом нельзя упоминать в app.config.вы можете попробовать использовать относительные пути, из которых app.config является резидентным IE "../App_Data" или "/App_data", но я не уверен, что вы соответствуете точным требованиям.

Удачи

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top