我如何让每个开发者拥有自己的私人web.config?


3

考虑一群在ASP.net Web应用程序上工作的开发人员。每个开发者都有一个DB的私人副本,在其私有的本地数据库引擎上运行,因此每个开发者都有不同的连接字符串。

目前,每个dev都有web.config修改其连接字符串,有时这些修改之一会被提交到源代码管理,这是不好的。

我如何在源代码管理中拥有默认的web.config,并让每个开发人员拥有自己的私人副本,并且被源代码控制忽略? (如果可能,我宁愿选择避免使用web.config转换文件的解决方案,因为它们的语法有点不透明)。

  0

您使用的是什么源代码管理,以及哪个版本? 31 5月. 152015-05-31 18:57:03

  0

不要让他们检查web.config问题解决;) 31 5月. 152015-05-31 18:59:00

  0

为什么“与他们的连接字符串”?你有没有尝试过使用类似“localhost \ DBName”的东西(或者你的数据库需要的任何连接字符串),对于每个人来说都是相同的? 31 5月. 152015-05-31 19:06:06

  0

它更好地确保所有开发者的连接字符串都是相同的。 '''通常可以做到这一点。 31 5月. 152015-05-31 19:12:32

  0

@JoshStevens:我曾经认识一位开发者,他有着同样的“愿景”。每月犯几次错误。 ;-) 31 5月. 152015-05-31 19:13:49

  0

我知道这是侧面跟踪,但它对我很好 - 我使用配置设置包装,它允许覆盖配置值,如果它发现ENV变量中的东西。因此,web.config实际上是一个虚拟连接字符串,每个开发人员在其环境中设置一次连接字符串,而生产设置不同的连接字符串。 01 6月. 152015-06-01 03:41:14

  0

@Macb,SVN,很快就会迁移到git。 01 6月. 152015-06-01 07:26:40

  0

@JoshStevens在SVN中可以强制执行吗? Git的? GitHub的? 01 6月. 152015-06-01 07:26:47

  0

@ Alexei-levelnkov @ stefan让我们假设这是不可能的。团队分布和粗暴:) 01 6月. 152015-06-01 07:26:56

  0

@KenEgozi关心分享? :) 01 6月. 152015-06-01 07:27:58

  0

你去那里:https://gist.github.com/kenegozi/13f49f755ca4b1225631 01 6月. 152015-06-01 18:05:32

1

有几件事可以帮助。

  1. 执行所有开发人员遵循的约定。例如,Sql Server实例名称,数据库名称等在所有开发人员机器上应该相同,以便您不需要更改它们。此外,任何文件位置类型的设置应始终与项目或某个系统位置相关。总的来说,这个想法是保持你的设置,以便开发人员不需要检出和改变任何东西。

  2. 在某些情况下,执行上述操作可能不可行。在这种情况下,您可以将这些更改设置移动到不同的文件,并使用'configSource'在web.config中引用它。然后开发人员可以根据本地机器环境更改该设置文件。同样在这种情况下,您希望确保不是团队中的每个人都可以签入该文件,以避免不必要的重写。

希望它有帮助。

  0

我不认为'configSource ='会在这里做的伎俩。如果我将设置放在外部文件中,并且永远不提交该文件,那么源代码管理将会丢失设置,并且应用程序在克隆时不会运行。我正在寻找源控制中的一组默认配置设置,个人开发人员可以将其重写为源代码管理。 01 6月. 152015-06-01 07:41:01

  0

我想我没有明确提到,您将使用默认值将外部设置文件签入源代码管理。但是,然后将该文件的签入限制在团队中只有少数人。 01 6月. 152015-06-01 09:59:10

  0

Tx。是否可以限制SVN中每个用户/组级别的签入?那么git呢? 01 6月. 152015-06-01 10:23:29

+1

@urig它可以在TFS中完成。我不确定SVN或Git。 01 6月. 152015-06-01 15:31:29


1

在我们的项目中,我设置了一些东西,因此在那里默认配置在源代码控制下,因为web.config.templateweb.config本身被忽略。然后开发人员只需将web.config.template复制为web.config;并进行他们需要的任何本地编辑。

这是一个手动操作,但也可以使用MSBuild自动执行拷贝(只有在web.config不存在的情况下才能拷贝)。

如果你有一个CI /构建服务器,那么你可能还想采取web.config.template包含用于CI构建的配置的方法 - 这样你的CI构建就简化了,因为它总是可以覆盖web.configweb.config.template