在Subversion中存储ASP.NET网站的最佳实践?

时间:2009-08-31 12:32:57

标签: asp.net svn

我目前正在开发一个ASP.NET项目,其中有多个开发人员使用Subversion进行代码分发,但现在坦率地完全搞砸了。设置Subversion存储库的人员包括特定于其计算机,bin \ *目录和其他此类事物的配置文件。

我是一个必须检查这个存储库并让它在我的计算机上运行的人,我对此感到非常沮丧,因为我花了一段时间对它进行整理以使其完全编译。现在我正在考虑编写Subversion指南的文档,发送给我公司的技术负责人,这样我们就可以使流程标准化,避免出现这些问题。

我正在寻找的是对指南的输入。这是他们的开始,希望我们可以从中做出一些好事:

  

应该将文件结构设置为在构建输出目录外部检查第三方库(因为它们不会包含在存储库中。)此目录的名称应为“Libraries”。

     

Subversion中不应包含任何特定于机器的文件。因此,仅签入Web.config模板,该模板由开发人员自定义以适合其计算机。默认情况下,此行为包含在Visual Studio 2010中,并且各个配置文件(Web.Local.config)会自动应用模板(Web.config)。但是本地配置文件仍然不应该包含在Subversion中,只要它适用于特定的机器。

     

解决方案和项目文件不得包含任何绝对路径。

     

应设置忽略列表。从:

开始
'
*.user
obj
'
     

具有特定于网站和第三方库的类库的ASP.NET 2.0网站的示例文件结构:

'
/trunk/
    Libraries/
        ThirdParty.dll
    MyClassLibrary/
        bin/  [Ignore]
        obj/  [Ignore]
        Properties/
            AssemblyInfo.cs
        SomeClass.cs
        MyClassLibrary.csproj
            - Holds references to third-party libraries. For example:
              ../Libraries/ThirdParty.dll
    MyWebApplication/
        bin/
            ThirdParty.dll  [Ignore; copied by build process]
            ThirdParty.dll.refresh
                - Contains "../Libraries/ThirdParty.dll"
        Default.aspx
        Default.aspx.cs
        Web.config  [Ignore]
        Web.config.template
    MySolution.sln
        - Holds list of projects.
        - Has reference information for projects.
'
     

使用Web.config.template的替代方法是包含Local.config中的Web.config文件,但这可能不太灵活。

     

使用Web应用程序项目而不是Web站点项目时,引用将存储在项目文件中而不是.refresh文件中,因此将忽略bin /文件夹。

有人可以在上述建议中看到错误吗?缺少什么?有没有人有关于忽略列表的建议?我刚开始时有几个条目。

2 个答案:

答案 0 :(得分:7)

我认为你是一个很好的一步。但是为什么不对/ MyWebApplication中的整个bin文件夹而不是文件进行忽略?您不会将构建输出添加到subversion中吗?我肯定会认为这是一种不好的做法。

此外,如果可能,您可以将web.config文件添加到subversion,但在元素中引用带有appSettings的新文件:例如

<appSettings file="local.config">

然后让svn忽略local.config文件。这就是我经常运作的方式。

但是当然只有每个可配置参数都在appSettings中才有效(这是我不喜欢提供者模型的原因之一,因为所有提供者都需要从connectionString元素获取连接字符串,而你无法重新配置它们来自appSettings的连接字符串)

编辑:troethom启发了我并指出,您还可以在单​​独的文件中覆盖connectionString配置设置

<connectionStrings configSource="ConnectionStrings.config"/>.

所以我要做的是将实际的web.config文件放在subversion控件下,但让svn忽略那些在本地覆盖设置的其他文件。

答案 1 :(得分:1)

你应该添加.refresh文件;不是真正的DLL。

Visual Studio项目系统将应添加到源代码管理的文件列表发送给SCC提供程序。 AnkhSVN是一个Subversion SCC提供程序,它使用此信息建议添加这些文件(而不是其他文件)。

VisualSVN和其他仅查看文件扩展名的Subversion客户端无法从ASP.Net获取此信息。

(注意:如果删除.refresh文件,Visual Studio会将DLL添加到应提交的文件列表中)

相关问题