C# 我应该在WPF中将应用程序特定的配置文件存储在哪里

C# 我应该在WPF中将应用程序特定的配置文件存储在哪里,c#,wpf,directory-structure,C#,Wpf,Directory Structure,背景:我有一些应用程序数据。i、 e.数据库中有重要的配置文件。 此数据对于应用程序启动至关重要,否则将退出 问题:我应该将此数据存储在哪里。i、 e在哪个文件夹和哪里。 现在(这是错误的)它存储在Debug/App_Data中的一个文件夹中。但这会在git中引起问题,当我们发布应用程序时,找不到数据。那么我们可以把这个文件夹存放在哪里呢 当前结构为“WpfApplication2\WpfApplication2\bin\Debug” 这些文件需要在应用程序启动时出现。因此,它们需要成为应用程序

背景:我有一些应用程序数据。i、 e.数据库中有重要的配置文件。 此数据对于应用程序启动至关重要,否则将退出

问题:我应该将此数据存储在哪里。i、 e在哪个文件夹和哪里。 现在(这是错误的)它存储在Debug/App_Data中的一个文件夹中。但这会在git中引起问题,当我们发布应用程序时,找不到数据。那么我们可以把这个文件夹存放在哪里呢

当前结构为“WpfApplication2\WpfApplication2\bin\Debug”

这些文件需要在应用程序启动时出现。因此,它们需要成为应用程序本身的一部分。

建议使用:

var pathToConfig = Path.Combine( System.Environment.GetFolderPath(
           Environment.SpecialFolder.CommonApplicationData), YOUR_APP_NAME);
在Windows Vista和+计算机上,这将以“C:\ProgramData\AllUser\YOUR\u APP\u NAME”结尾

在Windows XP上“C:\Document and Settings\Application Data\YOUR\u APP\u NAME”

在这两种情况下,操作系统本身保证您在这些位置具有写入权限,并且它在用户眼中是“隐藏的”(默认情况下,这两个文件夹都是隐藏的)

正如@Athari正确建议的那样:你的应用程序名称应该是你的公司名称\你的应用程序名称建议使用:

var pathToConfig = Path.Combine( System.Environment.GetFolderPath(
           Environment.SpecialFolder.CommonApplicationData), YOUR_APP_NAME);
在Windows Vista和+计算机上,这将以“C:\ProgramData\AllUser\YOUR\u APP\u NAME”结尾

在Windows XP上“C:\Document and Settings\Application Data\YOUR\u APP\u NAME”

在这两种情况下,操作系统本身保证您在这些位置具有写入权限,并且它在用户眼中是“隐藏的”(默认情况下,这两个文件夹都是隐藏的)


正如@Athari正确建议的那样:您的应用程序名称应该是您的公司名称\您的应用程序名称

您可以将特定于应用程序的文件保存在

Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData),
    Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName));
但您也可以使用其他文件夹,如
mydocuments

编辑:我记得我在.NET 3.0的WPF应用程序中使用过独立存储(我想):


您可以将特定于应用程序的文件保存在

Path.Combine(Environment.GetFolderPath(
    Environment.SpecialFolder.LocalApplicationData),
    Path.GetFileNameWithoutExtension(AppDomain.CurrentDomain.FriendlyName));
但您也可以使用其他文件夹,如
mydocuments

编辑:我记得我在.NET 3.0的WPF应用程序中使用过独立存储(我想):


对于.NET桌面应用程序,您的App.config应该位于正常位置:它应该是与.exe位于同一文件夹中的yourApplication.exe.config。

对于.NET桌面应用程序,您的App.config应该位于正常位置:它应该是与.exe位于同一文件夹中的yourApplication.exe.config。

将这些文件包括到您的文件夹中投影并设置属性
复制到输出目录
始终复制
将这些文件包括到项目中,并设置属性
复制到输出目录
始终复制

将这些文件包括到项目中,并将属性“复制到输出目录”设置为“始终复制”,我将尝试此操作。请将此添加为答案,这不是必需的。先试试看:)@AndreyGordeev你的答案是正确的。请将此添加为答案,我会将其标记为正确。将这些文件包括到项目中,并将属性“复制到输出目录”设置为“始终复制”,我将尝试此操作。请将此添加为答案,这不是必需的。先试试看:)@AndreyGordeev你的答案是正确的。请将此添加为答案,我会将其标记为正确。建议使用“CompanyName\AppName”,而不仅仅是“AppName”。文件夹是“C:\ProgramData”和“C:\Document And Settings\All Users\Application Data”,AFAIK。建议使用“CompanyName\AppName”,而不仅仅是“AppName”。文件夹是“C:\ProgramData”和“C:\Document And Settings\All Users\Application Data”,AFAIK。使用“Documents”文件夹是个坏主意。由于各种应用程序不断地对该文件夹进行垃圾邮件处理,它变得几乎无法使用。使用程序集名称也是一个坏主意,因为推荐的方法是使用“CompanyName\AppName”。使用程序集名称将导致用无意义的文件夹滥发文件夹。最后,原始问题表明数据是特定于安装的,而不是特定于用户的。这些要点也适用于系统上的任何其他文件夹。在“CompanyName\AppName”上;我同意。我自己做;这个答案只是为了解释这个想法。并且-对于某些场景-
我的文档
是一个合乎逻辑的地方;特别是当您打算从用户的角度重用和共享生成的数据时。对于特定于应用程序的数据,可以使用
Environment.SpecialFolder.CommonApplicationData
。顺便问一下,你的建议是什么?使用“文档”文件夹是个坏主意。由于各种应用程序不断地对该文件夹进行垃圾邮件处理,它变得几乎无法使用。使用程序集名称也是一个坏主意,因为推荐的方法是使用“CompanyName\AppName”。使用程序集名称将导致用无意义的文件夹滥发文件夹。最后,原始问题表明数据是特定于安装的,而不是特定于用户的。这些要点也适用于系统上的任何其他文件夹。在“CompanyName\AppName”上;我同意。我自己做;这个答案只是为了解释这个想法。并且-对于某些场景-
我的文档
是一个合乎逻辑的地方;特别是当您打算从用户的角度重用和共享生成的数据时。对于特定于应用程序的数据,可以使用
Environment.SpecialFolder.CommonApplicationData
。顺便问一下,你有什么建议?