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

C# 每个团队成员和分支的不同*.csproj/*.config设置,c#,.net,version-control,visual-studio-2012,csproj,C#,.net,Version Control,Visual Studio 2012,Csproj,这个问题有点二合一,但两者都与同一个问题有关 我们是一个由10名开发人员组成的团队,一些开发人员更喜欢使用IIS的完整实例,而其他人更喜欢使用IIS Express。使用其中任何一种都有好处,例如,IIS最类似于生产环境,而IIS Express允许编辑并继续调试 除了10个开发人员工作组之外,我们还使用源代码管理,并且我们有一个分支结构。每个分支可能具有不同的web.config/app.config设置,例如数据库连接字符串。一个开发人员一次可能处理多个分支,因此我们通常每个分支有一个数据库

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

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

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

第一个问题是csproj文件,特别是web服务器设置。如果一个开发人员签入使用IIS Express的csproj文件,而另一个开发人员执行“获取最新信息”操作,则会覆盖他们的配置,浪费时间并造成挫折

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

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

显而易见的解决方案是,每个人都有完全相同的设置,但是一些开发人员可能希望使用LocalDB实例,其他人可能希望使用sqlexpress,而临时服务器使用一个完整的SQLServer实例。同样,这是另一个没有最终结果的设置


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

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

通过在解决方案资源管理器中选择.config文件,并单击(Visual Studio)
文件
->
源代码管理
->
从源代码管理中排除选择,我们最终找到了类似问题的答案

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


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

特别是对于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>
App.config或Web.config:
user.config:

如果它是Windows应用程序,您应该在user.config文件上设置“Copy to Output Directory”属性,以便Visual Studio将其复制到您的bin目录。

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

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

在.git文件夹中,有一些git钩子,您可以在其中放置脚本,以便在签出分支时执行。我有一个签出后脚本,它在我每次签出时都会自动执行,并为我更新连接字符串,从而使我不必手动更改web.config文件:

!/bin/bash 。配置 估价美元(吉特分行| grep“| sed”s/)


sed-es/{SERVER}/$SERVER/g-es/{DATABASE}/$DATABASE/g-es/{USER}/$USER/g-es/{PASS}/$PASS/g-es/{SITE\u TYPE}/$SITE\u TYPE/g\

我倾向于强迫人们拥有相同的环境。web服务器或数据库版本之间的细微差异可能意味着某个功能是否在生产中工作(可怕的“在我的机器上工作”综合症)。IIS(或IIS Express)与卡西尼的较量是一场大较量。但是如果你避免任何可能成为问题的模式,我想你可能会没事。我同意这是一个让每个人都使用相同东西的可靠方法,如果我们能让每个人都同意应该是什么。不幸的是,我无法告诉其他人如何工作。我们的web.config文件有点庞大。唯一经常更改的是连接字符串,以及一些其他设置。如果我将这些从源代码管理中排除,如果有人添加了新的web.config设置或节,则该更改不会传播给其他任何人,并且每个人都必须在开始处理该分支时更新其配置。为什么不将所有变量web.config内容放在单独的文件中,这些文件在主web.config中引用,并且只在本地保存这些文件-不签入。@Matthew true,这不是一个完美的解决方案,但对我们来说,它已经摆脱了一个巨大的头痛。。。单独的.config文件对您来说可能是一个更好的解决方案,我只是觉得我应该在我的两个ce中加入