12

这个问题是二合一的,但两者都与同一个问题有关。

我们是一个由 10 名开发人员组成的团队,一些开发人员更喜欢使用 IIS 的完整实例,而另一些开发人员更喜欢使用 IIS-Express。使用其中任何一种都有优点,例如,IIS 最接近生产环境,而 IIS-Express 允许编辑并继续调试。

除了 10 个开发人员工作团队外,我们还使用源代码控制,并且我们有一个分支结构。每个分支可能有不同的 web.config / app.config 设置,例如数据库连接字符串。开发人员一次可能在多个分支上工作,因此我们通常每个分支有一个数据库,我们正在研究具有本地数据库的开发人员,但是无论采用哪种方法,命名冲突仍然是一个问题(即开发人员可能有 2本地数据库,每个分支一个)。

第一个问题是带有 csproj 文件的问题,特别是 Web 服务器设置。如果一个开发人员签入使用 IIS-Express 的 csproj 文件,而另一个开发人员执行Get Latest,它将覆盖他们的配置,浪费时间并造成挫败感。

当然,最简单的解决方案是强制每个人使用一种工具、一种配置,但我宁愿不这样做,特别是对于与结果输出(编译代码)无关的东西。

第二个问题是配置文件,配置文件存储在源代码管理中(就像任何其他文件一样),所以当我们进行分支合并时,这些文件必须在之后手动更新。我知道配置文件有调试和发布转换,我们可以在两者中使用不同的连接字符串,但这并不能解决两个单独的开发人员可能在同一个分支上工作但使用不同的连接字符串的问题。

显而易见的解决方案是每个人都始终拥有完全相同的设置,但一些开发人员可能想要使用 LocalDB 实例,其他人可能想要使用 SQL-Express,而临时服务器使用完整的 SQLServer 实例。同样,这是另一个与最终结果无关的设置。

在管理团队成员之间以及分支/合并之间的配置方面,我还没有看到任何解决我的特定问题的方法。

4

3 回答 3

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 文件上设置“复制到输出目录”属性,以便 Visual Studio 将其复制到您的 bin 目录。

于 2013-03-26T20:19:42.670 回答
2

如果我正确理解您的问题,您基本上希望将您的 app.config / web.config / 某些其他文件排除在检入之外?出于某种原因,这似乎是一个隐藏的选项......

我们最终通过在解决方案资源管理器中选择 .config 文件并单击 (Visual Studio) File-> Source Control->找到了类似问题的答案Exclude selection from Source Control

这将防止选中的文件被签入并覆盖其他开发人员的文件。

(注意:这在 VS2010 中有效,我不能保证这个选项在 2012 年存在)

于 2013-03-26T20:19:18.010 回答
0

我有一个类似的问题,我有 3 个数据库用于 3 个环境的 3 个分支。

生产服务器 ==> 生产数据库 ==> 产品分支 ==> 产品连接字符串 测试服务器 ==> 主数据库 ==> 主分支 ==> 主连接字符串本地开发 ==> 本地数据库 ==> 开发人员分支 == > 开发者连接字符串 ...

在 .git 文件夹中,有 git 挂钩,您可以在其中放置脚本以在您签出分支时执行。我有结帐后脚本,它每次结帐时都会自行执行,并为我更新连接字符串,这样我就不用手动更改 web.config 文件:

!/bin/bash

. 配置评估 $(git 分支 | 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 \

于 2014-02-14T15:10:13.553 回答