在哪里保存配置文件

时间:2010-01-29 18:38:05

标签: c# configuration-files configuration-management

我为PayPal实现创建了一个新的C#项目(非Web)。我有一堆配置字符串,如下所示,我需要找出最好的存储方式。我创建的各种包装器类都使用这些字符串。此外,这是一个可以在任何Web项目甚至后端使用的项目。所以我需要一个很好的方法来解决这些问题,以便其他应用程序不需要,并将所有这些字符串键集中在我的PayPal C#项目中以维护它们。使用我的包装器项目的其他应用程序应该对这些字符串一无所知或需要...我的项目负责存储它们。

有了,在哪里?我在C#非Web项目中使用Web.Config吗?我使用的是App配置吗?我是否将它们存储在数据库中(不是坏主意)。或者我将它们作为常量存储在例如Constants.cs类中?

我也不知道将它们存储在Constants类中是否安全?在我看来,我最好的选择是在我的非Web项目中添加web.config或某种配置,然后将它们存储在那里。

6 个答案:

答案 0 :(得分:1)

“标准”.NET方法是创建一个app.config并将它们放在那里。这些将需要复制到调用您正在编写的库项目的任何项目的web.config或app.config中。

答案 1 :(得分:1)

只需使用.NET配置系统(System.Configuration),不用担心配置设置的存储位置。

如果您的代码是从非Web应用程序使用的,则可以在应用程序的.config文件中配置这些设置。 Web应用程序将使用web.config。

尽管名称不同,但app.config和web.config使用相同的API。

答案 2 :(得分:1)

我们刚才做过PayPal实现。我们最终做的是将这些敏感字符串作为加密字符串存储在web.config中。我认为对于您的场景,您可能会考虑做类似的事情(在web.config中存储为加密字符串),但通过使用 Intranet 唯一的Web服务包装它并仅提供对一个域帐户的访问来集中它。这确保除了一个域帐户之外没有人可以调用web服务来获取凭证或其他PayPal特定对象。

答案 3 :(得分:1)

如果在编译时确定字符串并且从不更改,请使用资源文件。

如果他们需要持久存储,你也可以使用系统注册表 - 我自己也在考虑这个,也使用资源文件来减少关键错别字:

// Get key
RegistryKey appKey = Registry.CurrentUser.CreateSubKey(Resources.keyAppPath);

// Read from key
string _configStr = (string)appKey.GetValue(Resources.keyConfigStr, string.Empty);

// Write to key
appKey.SetValue(Resources.keyConfigStr, _configStr);

Resources.keyAppPath"Software\[Company]\[App]"

类似

Resources.keyConfigStr是密钥的名称。

正如其他人所提到的,如果安全性是特定数据的问题,请添加一层加密!

答案 4 :(得分:0)

您的配置将取决于您的整体架构。如果您的消费应用程序不需要知道有关设置的任何信息,那么最好创建一个负责检索这些设置并将其作为显式属性输出的类。将它们放在某个版本的web.config中可能总是最好的,因为这允许您修改它们而无需重新编译和重新部署应用程序。您可能还需要考虑任何源代码控制或管理不同级别的配置(开发,测试,生产,预生产等)。

我使用了一个web.config方法,该方法根据访问它的服务器级别或类型创建自己的配置节和连接字符串节。然后我构建了自己的“ConfigurationManager”类,它以几乎与内置ConfigurationManager相同的方式访问它们(因此它的用法对其他开发人员是透明的)。然后我的web.config可以在其中进行任何设置,并且类本身可以在整个企业中以与ASP.Net配置标准一致的方式使用。任何需要设置的人都会调用myConfigurationManager.AppSettings(key)并根据相关服务器的级别接收相应的设置,并且配置文件的源代码控制不必在服务器之间有所不同。

同样,可以通过这种方式配置app.config以提供扩展配置支持。

答案 5 :(得分:0)

你可以创建一个包含它们的简单类,xmlSerialize该类到你想要被其他应用程序读回同一个类的任何地方。