管理VS2010和TFS中的团队的web.config

Jae*_*ell 20 asp.net tfs web-config visual-studio-2010

由于VS2010要求web.config包含在项目中,我们如何允许每个人保留自己的自定义配置文件而不会遇到源代码控制问题?

以前,我们只是将web.config从我们的项目中删除,允许每个人在他们的机器上保留自己的本地版本的web.config.我们搬到了VS2010,现在它迫使我将web.config添加到我的项目中以运行调试模式.因为我们的项目链接到TFS,它会自动将web.config添加到源代码控制并尝试以这种方式维护它.

有没有办法在调试模式下运行而不在项目中包含web.config?或者有更好的方法来管理配置文件?

小智 32

我希望这可以帮助别人.我过去几个月已经使用过这种方法.这很容易做到.我正在使用VS 2010和TFS 2010.让我们分解一下:

  • 所有的Web配置文件现在都是"DependentOn"的"web.config"
  • 每个开发人员或团队都需要自己的"[User/Team] .Debug.config"
  • 无论我们是否在发布模式下"发布",都应该转换配置文件.

以下是它的完成方式:

  1. 右键单击要执行此操作的Web项目,然后选择"卸载项目"(而不是"删除项目").

  2. 再次右键单击同一个Web项目(现在应该显示为灰色),然后选择"编辑... csproj".这将在Xml编辑器中打开项目.

  3. 向下滚动,直到找到包含所有"Web.config"列表的部分.现在,注释掉Xml中的所有"DependentUpon"元素.

  4. 关闭Xml编辑器并保存更改.接下来,再次右键单击您的项目,然后选择"重新加载".当项目重新加载时,您会注意到Web.configs不再"堆叠"在"Web.config"下.这对于"欺骗"TFS是必要的.

  5. 现在,复制"Web.config"文件,将其粘贴到同一个项目中,并将其重命名为"Web.base.config".这将用于每次重新生成Web.config(下面介绍).

  6. 现在,选择Web.config文件并转到"文件 - >源代码管理 - >从源代码管理中排除Web.config".此外,打开源代码管理资源管理器(TFS资源管​​理器视图)并找到Web.config所在的位置,并从TFS中删除它.这样做是因为每次构建项目时都会重新生成Web.config(我将在下面介绍).

  7. 现在,我们将创建一个新的Build文件,它将帮助我们为任何Built Type重新生成Web.config,甚至是Debug类(这是Web.config Transformed缺少的开始).在项目中创建一个新的Xml文件,并将其重命名为"[YourProjectName] .wpp.targets".重要的是要确切地命名您的项目,包括所有点,破折号等(例如My.Project.wpp.targets).

  8. 现在,在新文件中输入以下Xml.如果它开始强调语法错误,请不要担心:

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <UsingTask TaskName="TransformXml"
                   AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
    
        <!-- Make sure web.config will be there even for package/publish -->
        <Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild">
            <Copy SourceFiles="Web.base.config"
                  DestinationFiles="Web.config"
                  OverwriteReadOnlyFiles="true"
                  SkipUnchangedFiles="false" />
        </Target>
    
        <Target Name="CustomTarget" BeforeTargets="BeforeBuild">
            <Message Text="Transforming: Web.$(Configuration).config" Importance="high" />
            <TransformXml Source="Web.base.config"
                          Transform="Web.$(Configuration).config"
                          Destination="Web.config" />
        </Target>
    </Project>
    
    Run Code Online (Sandbox Code Playgroud)
  9. 现在,从现在开始,你永远不要编辑Web.config,它会在每次应用程序编译时被覆盖.您只需编辑"Web.base.config".

  10. 现在,让我们让Project看起来像它.再次右键单击Project并"卸载"它.现在,再次右键单击并"编辑"它.现在,返回并取消评论我们在步骤#3中注释掉的所有元素.此外,您应该在"Web.base.config"元素下添加"DependentOn"元素,以便它也将显示在"Web.config"下.关闭并保存,然后重新加载项目.您应该注意到所有配置现在再次位于"Web.config"下.

  11. 此时,您可以根据需要向项目/解决方案添加任意数量的配置.例如,我添加了一个名为"Tim(Debug)"的Build Config,但Project配置名为"Tim.Debug".当我右键单击"Web.config"并选择"添加配置转换"时,它现在添加了我的"Web.Tim.Debug.config"文件.您还可以为每个环境或每个团队添加配置.


值得注意的是,您的个人配置文件只是"Web.base.config"的子集,并且在任何构建过程中它们都将被"转换".要在调试期间切换要构建的Transform,只需转到解决方案的顶部并选择所需的Build Config.只要您拥有该Build Config的web.config,它就会转换.如果没有,您将获得"Web.base.config".

注意:这也适用于标准Windows/WPF应用程序以及"app.config".


Bri*_*ter 1

贾勒特,

我所拥有的只是关于我们如何处理这种情况的轶事。

我们有一个由 4 名程序员组成的团队。

我们使用 VS 之外的源代码控制解决方案——TortoiseSVN。我们每个人都维护自己的本地 web.config,该配置包含在项目中。项目文件包含在存储库中,但我们将 web.config 设置为“提交时忽略”状态。

我不确定您使用的是什么源代码控制,但是使用 Tortoise SVN(在 Visual Studio 之外运行)进行颠覆对于我们的小团队来说非常有效。我们大多数人在两台独立的机器上编程......一台在办公室,一台在家里......所以当你将其与我们有两台生产服务器的事实结合起来时,我们可以轻松地处理每个项目 10 个 web.config。

话虽如此,您必须记住在设置新的开发计算机时引入其他开发人员的 web.config 文件,否则解决方案将无法正确加载,或者设置默认的 web.config,其中不包含适当的连接字符串,并且应用程序设置。

最后一点:我们使用 IIS 7 进行调试