Pregunta

Estoy escribiendo una aplicación de escritorio que necesita una capa de persistencia simple: descubrí SubSonic y su capacidad para trabajar con SQLite. Sin embargo, necesito mantener el archivo de base de datos en la carpeta AppData del usuario y no sé cómo poner ese valor en app.config. No quiero usar rutas absolutas.

¿Puede app.config acceder de alguna manera a las variables de entorno o hacer referencia a la carpeta de datos de la aplicación?

¿Fue útil?

Solución

No hay forma de especificar la carpeta AppData en app.config para una cadena de conexiones.

Pero lo que podría hacer es escribir el valor en el archivo de configuración durante la instalación o cuando la aplicación se ejecuta por primera vez.

Otros consejos

Para Subsonic v2.x, ignoraría la cadena de conexión app.config y la configuraría en tiempo de ejecución antes de trabajar con la base de datos. El nombre del proveedor sigue siendo el mismo, por supuesto.

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);

El " modo marco " de encontrar appdata es usar Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)

Esto encontrará la ruta de acceso de la aplicación correcta independientemente de la plataforma.

Hay varias formas si está utilizando ASP.NET, en cualquiera de los idiomas

Server.MapPath (" ~ ") devolverá la raíz de la aplicación como un nombre de ruta completo, luego puedes agregar " / app_data " a ella para obtener su ruta completa.

También puede inspeccionar HttpContext.Current.Request y HttpContext.Current.Application hay numerosas propiedades (y mucho mejores que la que acabo de mencionar) que le proporcionarán la misma carpeta, siendo la raíz de la aplicación la ruta completa.

Tenga en cuenta que todo esto debería funcionar incluso si tiene la aplicación como una carpeta virtual y una carpeta normal con una aplicación configurada en IIS en esa carpeta

Sin embargo, esto solo es posible en tiempo de ejecución, por lo que realmente no se puede mencionar en la aplicación .config. podría intentar usar rutas de acceso relacionales desde donde app.config es un IE residente " ../ App_Data " o " / App_data " pero no estoy seguro de tus requisitos exactos.

Buena suerte

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top