每个团队成员和分支的*.csproj/*.config设置不同

Mat*_*hew 12 .net c# version-control csproj visual-studio-2012

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

我们是由10个开发人员组成的团队,一些开发人员更喜欢使用IIS的完整实例,而其他开发人员更喜欢使用IIS-Express.使用其中任何一个都是值得的,例如,IIS最类似于生产,而IIS-Express允许编辑并继续调试.

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

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

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

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

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

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

Joe*_*nos 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>
Run Code Online (Sandbox Code Playgroud)

如果它是Windows应用程序,您将在user.config文件上设置"复制到输出目录"属性,以便Visual Studio将其复制到您的bin目录.