2010-08-06 72 views
1

我们的大部分C#项目配置都保存在* .ini文件中。这些文件主要包含 许多部分影响程序行为的各个方面。但除了常规配置数据之外,某些部分很容易受到db连接字符串或服务器密码的影响。我们尽量保持这部分有以下几种形式:用于在SVN中存储配置文件的策略

[Database] 
user=testuser 
database=testdb 
password= 

但是,当开发者测试应用程序,他必须填写的配置,以启动应用程序。一些密码被委托进入版本控制是很常见的。 由于这些文件对于应用程序是不可或缺的,因此它们不能包含在.svnignore中。 我正在寻找的可能是某种脚本(也许在PowerShell中)。这将扫描所有* .ini文件并清除所有密码。最有趣的解决方案是添加一些外部密码存储,可用于对* .ini文件中的密码进行编码和解码。

回答

0

我不会回答你的问题,而是建议一种不同的方法,假设现在改变相关设计还为时不晚。

您不应该将密码存储在与其他文件相同的文件中。除常规配置文件之外,还应该读取专用密码文件(或从密码存储服务中检索密码)。这不只是不存储在SVN密码,但也对没有暴露在肩窥密码,不小心邮寄或当有人问与非工作配置的帮助,张贴等

2

我总是推来存储配置模板文件在Subversion中,但不是实际的配置文件。因此,如果配置文件是“config.ini”,那么我将检入一个填充了非工作示例数据的“config.ini.template”。

然后为了防止多个开发者检查他们各自的“config.ini”文件,我将实际的配置文件名添加到svn:ignore属性列表中。

这迫使开发人员复制文件并针对其环境进行适当修改,但通过不强制他们找出需要显示的字段,简化了该任务的工作。如果您有时间,甚至可以将注释嵌入到模板文件中,以简化某些配置选项的含义。

在文件的顶部,包括如何使用系统中的模板,它应该读一些类似配置方向:

# *** CONFIGURATION TEMPLATE --- DO NOT MODIFY THIS FILE *** 
# 1. Make a copy of this file in the same directory with the command "copy config.ini.template config.ini" 
# 2. Edit the new copy and follow the rest of the instructions 
# 
# Change "this.system.hostname" to the hostname of this system 
Hostname = this.system.hostname 
# Set the answer "23" to "42" 
Answer = 23 

你的想法....

如果你有问题(或者认为你可能有问题),通过config.ini.template文件检查他们的配置选项,那么我建议在模板文件中使用“svn lock”。但是,在适当的警告下,我从未发现它是必要的。