早在九十年代,微软推出了Windows注册表。应用程序可以将设置存储在不同的配置有适用于应用程序范围和用户特定范围的配置单元,这些范围放在适当的位置,以便漫游配置文件正常工作。
在.NET 2.0及更高版本中,我们将此事称为Application Settings。应用程序可以使用它们将设置存储在XML文件中, app .exe.config和 user .config。这些适用于应用程序范围和用户特定的范围,并且这些范围放置在适当的位置,以便漫游配置文件正常工作。
听起来很熟悉?这些应用程序设置由XML文件支持的原因是什么,而不是简单地使用注册表?这不就是注册表的目的吗?
我能想到的唯一原因是注册表是特定于Windows的,而.NET试图与平台无关。这是(还是 )的原因,还是我忽略了其他考虑因素?
答案 0 :(得分:28)
依赖注册表会阻止XCOPY Deployment。
答案 1 :(得分:23)
我认为这不是一个答案,我认为这是一个组合:
答案 2 :(得分:15)
另一个原因是,为了编辑注册表,您必须拥有更高的权限。如果您只是编辑应用程序配置文件,则只需拥有该文件的权限。
答案 3 :(得分:12)
我更喜欢配置文件。
答案 4 :(得分:7)
这是因为注册表是一个丑陋的噩梦,人们不喜欢它。它也不支持xcopy部署。通过使用xml文件进行配置,您可以在不需要安装程序的情况下将应用程序从一台机器移动到另一台机器。这是在90年代编写代码的最大抱怨之一。
使用注册表,您必须授予某人在安装许多组织禁止的应用程序时修改它的权限。要修改应用程序的设置,您还必须知道在注册表中查找哪些内容在许多情况下最难。使用配置文件,它与大多数其他应用程序隔离。通常,您需要的所有设置都在那里,以便于查看和修改。
答案 5 :(得分:5)
一个直接(但重要)优势:
使用plain
配置文件,用户可以在从备份重新安装/恢复时轻松恢复其设置。从注册表值中执行此操作要困难得多。
答案 6 :(得分:3)
通过注册表转移配置文件的一大优势是允许并行安装相同的程序。使用注册表,中央配置信息将重叠这些重复安装,但使用配置文件,信息将保持为每个特定安装的私密。确实,特定于用户的配置覆盖可能会重叠(因为它们存储在用户的app数据文件夹中,而不是特定于安装路径),但想象一下不同用户使用不同安装的情况,在这种情况下,这个潜在的问题就变成了不相关的。
答案 7 :(得分:2)
我认为其中一个主要原因是应用程序更新。当您安装更新(即使用ClickOnce)时,新设置实际上会进入新文件夹。卸载它时,将删除新文件夹,旧设置仍然存在。如果使用注册表,则无法进行“版本控制”。
其他原因可能包括:
答案 8 :(得分:2)
在我看来,注册表是“当时似乎是一个好主意”的事情之一 - 由于其他人已经列出的众多原因。认识到某些东西毕竟不是一个好主意并没有错,而是使用更简单,更方便的替代方案,即使它在某些方面看似倒退了一步。
答案 9 :(得分:1)
我听到一个相当实质性的传闻,即由share支持的sharepoint和团队基金会服务器使用的数据存储格式最初是为了取代Windows 7中的Windows文件系统。如果这是计划,那么windows会有获得/(有一天会?)获得一个用于存储数据列表的事务数据存储。这种数据存储方法可能在各方面都优于注册表。
鉴于此,看到Microsoft在使用.net框架时最小化注册表的使用并不令人惊讶。
答案 10 :(得分:1)
而不是简单地使用注册表
注册表不是简单。在我的电脑上,这是一个40MB的二进制混乱,我希望它里面的内容不会改变主意。
这不正是注册表的目的吗?
是。但话说回来,DLLs旨在为不同的应用程序提供共享功能。
答案 11 :(得分:0)
应用程序可移植性可能是一个原因。应用程序文件夹可以从一台计算机复制到另一台计算机,设置将随应用程序一起提在多台计算机上从USB闪存驱动器运行应用程序时很有用。
答案 12 :(得分:0)
我猜想远程部署的简易性是一个决定因素。
答案 13 :(得分:0)
我不认为这是一个独立于平台的问题。过去在Linux,Mac和Windows上开发了许多应用程序,有些使用配置文件,有些则使用注册表。
我认为主要原因来自“COM体验”。整个原则是在注册表中集中注册组件对象,以便任何应用程序都可以使用它而无需复制dll。这很快导致我们出现版本问题。多个应用程序很难使用同一组件的不同版本。
使用注册表中的配置,您会遇到同样的问题。如果开发没有正确完成,那么拥有相同应用程序的两个版本可能是一个真正的问题。很久以前我们使用多个版本的Oracle就遇到过这种问题。
凭借.Net以及硬盘和带宽的爆炸式容量,文件复制不再是一个问题。将依赖项复制到文件夹项目中可以大大简化应用程序部署。这同样适用于配置文件。您可以托管同一应用程序的多个副本/版本,而不会出现注册表有限的计算机/用户体系结构的问题。
答案 14 :(得分:0)
我认为.config文件的新方法有助于:
只是想到了一些想法......
HTH。
答案 15 :(得分:0)
Microsoft提出了两种方法,因为它们具有不同的功能。 例如,如果您创建了一些在Active Directory中使用的应用程序,则可以轻松修改数千台计算机的设置,甚至可以修改安装到不同目录的应用程序。如果选择xml,您应该知道每台PC的应用程序文件夹,或者创建一些智能脚本来查找它们。 但是很多人说xml更便于携带,设置备份和其他。
所以,没有最好的办法。需要注册的开发人员 - 直接使用它。这并不困难。可能这就是为什么微软没有在注册表中进行应用程序设置。
答案 16 :(得分:-1)
我认为应用程序设置(.config文件)存在一个巨大的安全问题,可以在任何文本编辑器中进行编辑并更改所有内容。
假设存储了一个connectionString,并且删除或更改了配置文件中的所有值,那么应用程序将会有很多问题,因此配置文件应该受到保护。
例如,或以DLL文件存储设置。