这个问题是二合一的,但两者都与同一个问题有关。
我们是由10名开发人员组成的团队,一些开发人员更喜欢使用完整的IIS实例,而其他人则更喜欢使用IIS-Express。例如,使用IIS非常类似于生产,而IIS-Express允许编辑并继续调试。
除了10个开发人员工作团队之外,我们还在使用源代码控制,并且我们有一个分支结构。每个分支可能具有不同的web.config / app.config设置,例如数据库连接字符串。开发人员可能一次在多个分支上工作,因此我们通常每个分支都有一个数据库,我们正在查看具有本地数据库的开发人员,但无论采用何种方法,命名冲突仍然是一个问题(即开发人员可能有2个本地数据库,每个分支一个。)
第一个问题是带有csproj文件的问题,特别是Web服务器设置。如果一个开发人员签入使用IIS-Express的csproj文件,而另一个开发人员执行获取最新,则会覆盖他们的配置,浪费时间并造成挫败感。
当然,最简单的解决方案是强制每个人使用一个工具,一个配置,但我宁愿不这样做,特别是对于与结果输出无关的东西(编译代码)。
第二个问题是配置文件,配置文件存储在源代码控制中(就像任何其他文件一样),因此当我们进行分支合并时,这些文件必须在之后手动更新。我知道配置文件有调试和发布转换,我们可以在两者中都有不同的连接字符串,但这并不能解决两个开发人员可能在同一分支上工作但具有不同连接字符串的问题。
显而易见的解决方案是每个人总是拥有完全相同的设置,但是一些开发人员可能希望使用LocalDB实例,其他人可能希望使用SQL-Express,而登台服务器使用完整的SQLServer实例。同样,这是另一个与最终结果无关的设置。
在管理团队成员之间的配置以及分支/合并之间,我没有看到任何针对我的特定问题的解决方案。
答案 0 :(得分:6)
特别是对于Web服务器,VS有一个复选框“将服务器设置应用于所有用户(存储在项目文件中)” - 如果未选中,则该设置存储在您的本地.csproj.user文件中,因此每个人都可以拥有他们的那里有自己的设置。
对于连接字符串,您可以在每台计算机上都有一个“user.config”文件(不在源代码管理中),开发人员可以在其中放入连接字符串。主配置文件可以只加载此文件以获取连接字符串。有几种方法可以做到这一点,但我试过这个:
App.config or Web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings configSource="user.config"></connectionStrings>
</configuration>
user.config:
<connectionStrings>
<add name="test" connectionString="Server=.;Database=...;"/>
</connectionStrings>
如果是Windows应用程序,则在user.config文件中设置“Copy to Output Directory”属性,以便Visual Studio将其复制到bin目录。
答案 1 :(得分:2)
如果我理解你的问题,你基本上想要排除你的app.config / web.config /某些其他文件被检入?出于某种原因,这似乎是一个隐藏的选择......
通过在解决方案资源管理器中选择.config文件,然后单击(Visual Studio)File
- &gt;,我们终于找到了类似问题的答案。 Source Control
- &gt; Exclude selection from Source Control
。
这将使选中的文件不会被检入并覆盖其他开发人员的文件。
(注意:这适用于VS2010,我无法保证2012年存在此选项)
答案 2 :(得分:0)
我遇到了类似的问题,我在3个环境中有3个分支的3个数据库。
生产服务器==&gt;生产DB ==&gt; prod branch ==&gt;产品连接字符串 测试服务器==&gt;主DB ==&gt;主分支==&gt;主连接字符串 本地开发==&gt;本地DB ==&gt;开发者分支==&gt;开发人员连接字符串......
在.git文件夹中,有一个git钩子,你可以在每次签出分支时放置脚本来执行。我有一个post-checkout脚本,每次我签出时都会自行执行,并为我更新连接字符串,这样就可以避免手动更改到web.config文件:
。配置 eval $(git branch | grep“”| sed“s / //”)
sed -es / {SERVER} / $ server / g -es / {DATABASE} / $ database / g -es / {USER} / $ user / g -es / {PASS} / $ pass / g -es / {SITE_TYPE} / $ site_type / g \