C#设置xml文件位置

C#设置xml文件位置,c#,settings,C#,Settings,我有一个基于C#Setting类中的值读取文件的项目。但是,此值会随着计算机的不同而变化,并且在第一次将程序作为公司环境运行时,Id不会询问用户,而是希望在安装程序中对其进行设置,但文件位于何处?有更简单的方法吗 这是一个visual studio加载项,不是一个独立的程序注册表,也不是一个INI文件或XML文件,任何最适合您的文件。最好的选择是注册表。i安装应用程序将需要管理员访问权限,因此在安装过程中写入注册表不会成为问题 更多信息如果有人意外删除ini或设置文件,则程序可能会停止工作。从您

我有一个基于C#Setting类中的值读取文件的项目。但是,此值会随着计算机的不同而变化,并且在第一次将程序作为公司环境运行时,Id不会询问用户,而是希望在安装程序中对其进行设置,但文件位于何处?有更简单的方法吗


这是一个visual studio加载项,不是一个独立的程序注册表,也不是一个INI文件或XML文件,任何最适合您的文件。

最好的选择是注册表。i安装应用程序将需要管理员访问权限,因此在安装过程中写入注册表不会成为问题


更多信息如果有人意外删除ini或设置文件,则程序可能会停止工作。

从您的帖子中可以看出您有一个windows应用程序,您可以在应用程序配置中存储初始值,也可以在Visual Studio中创建安装程序,并编写自定义操作,以便在安装项目中首次安装时将值写入文件。

我相信您谈论的是设计器生成的设置(即.settings文件)

确切路径通常包含某种散列(检查链接)。我通常有自己的设置类,我使用它在xml之间序列化,这给了我更多的自由(例如,我认为C#settings文件不允许添加自定义枚举,或者它们使添加自定义枚举比简单地将它们添加到.settings文件要难一些)


但是,在安装过程中可能不需要设置值?例如,您可以添加
FirstStartup
设置(最初设置为
true
),您可以在应用程序首次启动时读取该设置,然后将其设置为
false
。这样,当检测到“首次启动”时,您可以设置默认设置。

在安装程序结束时,您肯定需要某种自定义操作。您没有提到部署应用程序所使用的技术,因此我将不提供任何具体指导

我建议在
App.config
中设置该值。这是一个xml文件,名为
MyApplication.exe.config
,与应用程序位于同一目录中。如果尚未安装,请将其添加到安装程序中。在安装程序中,添加新设置:

<configuration>
  <appSettings>
    <add key="MySetting" value="My Value"/>
  </appSettings>
</configuration>

如果这是机器范围内的设置,则此安装程序是设置此设置的正确位置。如果您在第一次执行时这样做,那么如果第一个运行应用程序的人是具有有限权限的用户,您将在文件和目录的权限方面遇到许多问题

我的情况不同,我的项目是一个类库(dll),其中包含app.config文件。我决定创建4个应用程序设置变量(title、url、limit、rate)。要创建它,我右键单击项目-->属性-->设置。您可以使用以下命令-->Settings.Default.title等在代码中检索此值


问题是,假设我从这个库实例化了5个对象(同一个对象,例如MyProject.MyClass),我希望实例能够有自己的设置。我的意思是每个实例可能都有自己的xml设置文件。可以做到这一点吗?

配置文件是满足您要求的最简单的方法,但它不是最好的方法。事实上,对于这种情况,建议不要使用.config文件

  • 每当用户安装“更新”时,都有覆盖其现有更改的风险

  • 某些企业可能对.config文件有策略限制

  • 用户无法轻松地将其设置从一台PC移动到另一台PC


根据我自己的经验,使用XML、MS Access、注册表或文本文件来存储用户设置已被证明比使用.config文件更有用。

您说过这适用于公司环境。您可以为组策略创建管理模板,以在注册表中设置默认值。然后,如果尚未设置默认值,您的程序就可以查询该注册表值。

我个人永远不会使用web.config或app.config。只要阅读您自己的xml文件,就可以看到我在这方面的文章:

谢谢

Guido

为感兴趣的人回答原始问题中的“文件位于哪里”部分(我假设问题中的“设置文件”是“添加新项目”对话框中可用的“设置文件”项目)

在Win7(可能还有其他所有版本)中,设置文件将在以下路径下生成:

C:\Users\[user]\AppData\Local

此处的文件夹结构取决于您的AssemblyInfo和生成信息,“AssemblyCompany”字段(如果已填充)用于最上面的文件夹,下面是一个复制应用程序可执行文件名的文件夹,后面是生成,最后是设置文件(名为“*.config”)

在我的例子中,完整路径如下所示:

C:\Users\[user]\AppData\Local\[company\u name]\Application.exe\u StrongName\u zx0v1qxyoass4d0z3mtwe3vbrhaehkjg\0.0.5812.21662\user.config


我可能错了,但我认为您需要提供更多信息。什么是“C#Settings类”。这个词很含糊。请澄清您的问题。我认为这是我的.settings?当您进入c#projects属性时,您可以创建表示为类的设置。这可能有助于澄清?没有健全的“默认设置”,有3个,取决于您所在的位置,如何在安装时编写自定义操作?不太可能删除设置文件,但如果设置无法修复,将弹出一个对话框,询问最终用户路径,但由于这不是一个理想的UI案例,它是一个故障保护,而不是主要的设置方式。据我所知,它是一个保存在系统文件夹中的xml文件,但我不确定它存储在哪里。确实是那种设置,但我已经有了一个“首次启动”类型的对话框,不过最有可能遇到这种拨号的人
String setting = ConfigurationSettings.AppSettings["MySetting"];