这里的web.config文件和Visual Studio 2010的解决方案:
1)手动编辑你的web应用的.csproj文件,添加一个AfterBuild
目标是这样的:
<Project>
...
<Target Name="AfterBuild">
<Copy SourceFiles="web.config" DestinationFiles="obj\$(Configuration)\tempweb.config" />
<TransformXml Source="obj\$(Configuration)\tempweb.config"
Transform="web.$(USERNAME).config"
Destination="obj\$(Configuration)\tempweb2.config" />
<ReadLinesFromFile File="obj\$(Configuration)\tempweb2.config"><Output TaskParameter="Lines" ItemName="TransformedWebConfig"/></ReadLinesFromFile>
<ReadLinesFromFile File="web.config"><Output TaskParameter="Lines" ItemName="UnTransformedWebConfig"/></ReadLinesFromFile>
<Copy Condition=" @(UnTransformedWebConfig) != @(TransformedWebConfig) " SourceFiles="obj\$(Configuration)\tempweb2.config" DestinationFiles="web.config" OverwriteReadOnlyFiles="True" />
</Target>
</Project>
这一目标将改造与当前开发者相对应的Web.config文件登录 - 因此变量为$(USERNAME)
,并在1)中创建相应的文件。 即使本地Web.config是源代码控制的,它也会在每次构建内容更改(以避免重新启动)时替换本地Web.config,这就是为什么OverwriteReadOnlyFiles
设置为True。这一点实际上是有争议的。
2)为项目中的每个开发人员创建一个名为Web.[developer windows login].config
的文件。 (例如,在下面的屏幕截图我有一个名为SMO和smo2两个开发):
这些文件(1每显影剂)可/应源控制。它们不应该被标记为依赖主Web.config,因为我们希望能够单独检查它们。
这个文件的每一个表示一个转换应用于主Web.Config文件。 转换语法在这里描述:Web.config Transformation Syntax for Web Application Project Deployment。我们重复使用Visual Studio提供的这个很酷的Xml文件转换任务。此任务的目的是合并 Xml元素和属性,而不是覆盖整个文件。
例如,下面是一个示例web.[dev login].config
改变命名的连接字符串“MYDB”,无论Web.config文件的其余部分:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)" />
</connectionStrings>
</configuration>
现在,这个方案并不完美,因为:
- 建成后,开发商可能有不同的Web.Config局部比源控制系统
- 他们可能从源头上控制SYS得到一个新的Web.Config时强制本地写tem
- 开发人员不应该在主web.config中检出/。它应该保留给少数人。
但是至少你只需要维护一个独特的主web.config加上每个开发者一个转换文件。
对于App.config(不是网页)文件可以采取类似的方法,但我没有进一步详细说明。
我投票重新开放,因为这是Visual Studio开发人员的常见问题,直接涉及开发人员正在使用的工具。 (因此得票) – 2017-06-09 17:25:02
同意,这是一个长期存在的问题,因为我们的团队规模不断扩大,各种解决方案的尝试都不尽如人意。 – DiskJunky 2017-10-16 09:24:52