一个可靠的协作开发策略由以下因素组成:
源代码管理程序的一致性隔离性
要确保协作成功,其中最简单的方法就是使用源代码管理解决方案、项目和其他共享资源。源代码管理可以保护团队资源不会被意外删除,保护单个开发人员的更改不会被盲目或无意覆盖,还可以按版本维护所有项目文件的历史记录。Visual Studio.NET 使源代码管理成为项目文件管理的扩展,从而降低了源代码管理的复杂性。您无需离开集成开发环境 (IDE) 或者打开另一个应用程序,即可实现所有源代码管理操作。
了解解决方案和项目
Visual Studio 减少了项目文件管理和源代码管理中许多单调而复杂的操作。例如,当您在项目中添加新项时,Visual Studio 可以将其保存在存储区中的某个位置。只要文件是打开的并且按要求与项目编译在一起,就无需您来确定文件的保存位置。而在开发 Web 应用程序时,了解 Visual Studio.NET 如何在后台管理项目文件,可以为您和您的团队节省大量时间和金钱。
解决方案
无论何时从存储区中创建 Web 项目或打开现有的 Web 项目,系统都将自动创建包含该项目的解决方案。所有 Visual Studio.NET 解决方案都包含一个解决方案文件solutionname.sln,它存储解决方案元数据,例如项目列表及其在存储区中的位置。解决方案包含另一个解决方案文件solutionname.suo,它跟踪用户特定的信息,例如 Visual Studio 项目的默认保存位置。将解决方案添加到源代码管理时,将只添加 *.sln 文件。而且,从始至终都不会签入 *.suo 文件。
从源代码管理的角度而言,以下两个关于解决方案的重要事项值得注意。
解决方案是本地的。解决方案和 Web 项目文件存储在不同的位置。与Web 项目的文件项不同,解决方案文件永远不会存储在 Web 服务器上,除非您刻意将其存放在 Web 服务器上(建议您不要这样做)。Web 项目文件(.vbproj 和.csproj)驻留在 Web 服务器上,而解决方案文件(.sln 和.suo)以及 Solution Items(解决方案项)文件夹中的所有文件项在默认情况下都存储在文件系统文件夹中。这一点非常重要,因为它会影响源代码管理的 Web 项目的结构和可管理性。创建解决方案,而不是项目。通过先创建一个解决方案,然后再添加项目,您可以在存储区中维护解决方案及其项目之间的逻辑父子关系。这样做可以确保多项目解决方案中从属项目的可搜索性,还有助于避免一些易混淆的问题,这些问题可能会伴随一些更复杂的源代码管理操作而出现,例如分支与合并。
项目
在管理文件方面,Visual Studio.NET 只包含两类项目:Web 和非 Web 项目(即本地项目)。
Web 项目
在New Project(新建项目)对话框的 HTTP 位置创建的所有项目。这些项目主要用于向 Web 浏览器(即被称为 Web 应用程序的项目)提供内容,还可以在开发人员需要在服务器 (Web Services) 之间共享数据时使用。
本地项目
在非 HTTP 位置创建的所有项目(例如,C:/MyProjects 或\\MyComputer\MyProjects)。最常见的本地项目用于创建 Windows 应用程序。
与解决方案文件 *.sln 一样,所有项目都包含一个项目文件,用于标识其各项在计算机文件系统中的物理位置。例如,当您向 Visual Basic ASP.NET 项目添加文本文件时,其相对路径将被插入到项目文件 (*.vbproj) 中。
Web 项目
ASP.NET Web 项目是一种快速应用程序开发 (RAD) 模板,适用于基于 Web 的瘦客户机应用程序。在ASP.NET Web 应用程序中,Web 窗体页通过浏览器向用户提供信息,并使用服务器代码实现应用程序逻辑。Web 应用程序是围绕 ASP.NET 建立的,ASP.NET 是一个平台,包含在 Web 服务器上开发和运行应用程序所需的设计时对象和控件以及运行时执行环境。
管理源代码管理下的 Web 项目时,需要注意以下事项:
使用 Visual Studio.NET 执行所有可用的源代码管理操作。不要以手动方式对文件强制进行源代码管理。使用 Add to Source Control(添加到源代码管理)或Check In(签入)命令时,所有应由源代码管理的文件都将自动被存放在那里。访问方法
Visual Studio 通过以下两种方法之一访问和管理 Web 服务器上的文件:文件共享,这是 Visual Studio.NET 中的新功能;或FrontPage,它已经在 Visual InterDev 中使用。默认情况下,使用新增的文件共享访问方法。
文件共享
Visual Studio 使用基于 Windows 的文件管理命令访问 Web 项目文件。文件共享是默认的 Web 访问方法,它为源代码管理提供良好的支持。
FrontPage
所有文件都使用 HTTP 协议进行管理。来自 Visual Studio 的源代码管理请求通过 FrontPage Server Extensions 被转发到源代码管理提供程序(例如 Visual SourceSafe)的服务器安装。FrontPage 访问方法支持的源代码管理命令比文件共享访问方法支持的命令要少。
项目文件
与本地项目不同,Web 项目不能包含其项目目录以外的文件项。将现有文件添加到 Web 项目时,Visual Studio 通过将文件复制到virtual application root(虚拟应用程序根,Web 服务器上的一个目录,所有项目项和生成输出都存储在这里),从而将其包含在项目中。
配置文件
Web.config 文件是一种特殊的应用程序配置文件,可以在设计应用程序时定义其设置。部署之后,无需关闭 Web 服务器即可更改这些设置。多个名为 Web.config 的配置文件可以出现在 ASP.NET Web 应用程序服务器的多个目录中。每个 Web.config 文件都将配置设置(例如 IIS 身份验证设置)应用到其自身目录的源文件中。
您可以在 Web 项目中创建自定义配置文件,覆盖默认的 Web.config 文件(例如,mysettings.config)中的设置。在团队开发环境中工作时,有时候需要创建此类文件。对于 Web 项目,Web.config 是唯一要添加到源代码管理的 *.config 文件。
不进行源代码管理的文件
Projectname.vbproj.webinfo 是特殊的项目文件,用于记录虚拟应用程序根。由于每个用户的项目工作副本必须包含其自身的虚拟应用程序根,因此 *.webinfo 文件不会出现在 Solution Explorer(解决方案资源管理器)中,也不会被添加到源代码管理。因此,如果您分配了 *.webinfo 文件,则每个开发人员的更改都将在没有事先警告的情况下保存到您的个人文件之上。
除webinfo 文件外,Visual Studio.NET 也不会向源代码管理添加特定的项目文件。大多数排除的文件都包含不能共享的用户特定的设置。与*.suo 文件一样,下列 Web 项目文件也不应添加到源代码管理:
生成输出*.vbproj.user、*.csproj.user*.vbproj.webinfo、*.csproj.webinfo*.scc、.vspscc、.vssscc 等等。包含可覆盖标准 Web.config 文件的用户设置的所有配置文件。默认情况下在 Solution Explorer(解决方案资源管理器)中隐藏的所有文件(aspx.vb 和aspx.resx 文件除外)。
Web 引用、Web 项目和源代码管理集成
“Web 引用”是生成的代理类,表示已部署的 XML Web service 所提供的功能。在ASP.NET Web 项目中,URL 代表 Web 引用,它既可以是静态的,也可以是动态的。Web 引用 URL 属性的默认值是静态的。在团队中部署 Web 应用程序时,某些情况下需要将此属性更改为动态。对于那些使用源代码管理并且开发包含 ASP.NET Web 应用程序和 Web service 项目的解决方案的团队,建议使用动态 URL。在某些情况下,Web 引用可能对一个用户有效,而对另一个用户无效。如果出现这种情况,您可以使用配置文件在个人配置文件中定义并存储这些共享资源的相对路径。
建立源代码管理策略
源代码管理正如一种工具,以软件开发的方式进行工作。它可以使并行开发变得更加容易,还可以实现开发隔离,但是它并不能确保实现这两个功能。一个团队只有通过建立策略并坚持执行,才能发掘出源代码管理的最大潜力。开发 Web 项目的策略时,您必须从以下各类中选择一种工作方法:
本地主机与远程主机
讨论本地主机与远程主机文件共享 Web 项目之间的重要区别。
Web 访问方法
定义并比较 FrontPage 和文件共享访问方法。
共享签出
实现禁用独占签出模式的环境,以便开发人员能够同时编辑相同的文件。
本地主机与远程主机
在团队开发环境中,最初保存文件共享 Web 项目的位置至关重要。如果将 Web 项目的工作副本保存到 http://localhost 的子目录,则该 Web 项目将被看作“本地主机项目”。如果将其工作副本保存到非“本地主机”的位置(例如 http://teamserver/webapplication1),则该项目被看作“远程主机项目”。
本地主机项目在本地进行调试。远程主机项目进行远程调试。但是在您调试远程主机 Web 项目之前,必须让该计算机 Administrators 组的成员授予您 Debugger User 权限。
在Visual Studio.NET 中,Http://localhost 是Web 项目的默认位置,也是推荐位置。出现下列情况之一时,您需要将项目的工作副本保存到远程主机位置:
您的个人计算机不能用作 IIS Web 服务器。您需要在生产服务器上执行预部署测试和调试。
在大多数实际情况下,团队用来部署其 Web 应用程序的生产服务器的性能要比他们的开发计算机强大得多。将Web 应用程序部署到此类服务器之前,您可以从源代码管理(位于您自己的计算机中)中将它们打开,在生产服务器的虚拟目录中设置工作副本项目的位置,然后运行并调试该项目。在生产服务器上,您可以测试计时和并发问题,这些问题在性能较差的台式计算机上可能不会显示出来。在一台计算机上开发、然后使用与生产服务器环境类似或相同的另一台计算机进行调试的应用程序,通常易于部署,而且成本较低。
注意:当一位用户开始调试后,调试进程将锁定共享的 Web 服务器,从而在停止调试前有效防止其他用户使用该服务器。
Web 访问方法
Web 访问方法指定 Visual Studio 如何获得对网络上 Web 项目文件的写入权限。您所选择的方法对于处理源代码管理的 Web 项目具有重大影响。对每个 Web 项目始终使用相同的 Web 访问方法,可以避免团队出现混乱情况。
Visual Studio 提供两种 Web 访问方法,即“文件共享”和“FrontPage”。文件共享是一项新增功能,它是大多数 Visual Studio.NET Web 项目的默认 Web 访问方法,也是建议使用的访问方法。
文件共享
这是默认的访问方法。文件共享 Web 应用程序驻留在共享的网络位置。创建 Web 应用程序时,您需要为项目提供 HTTP 地址,Visual Studio 则将该地址解析为统一命名约定 (UNC) 共享。接下来对该项目执行的操作将使用 UNC 可寻址网络共享;通过组合使用直接文件访问和 HTTP 访问,在网络位置上编辑、保存、编译并运行该项目。
从源代码管理打开 Web 项目时,Visual Studio 将在您的工作文件夹(例如 http:/localhost/WebApp1)中创建项目源代码管理的主控副本的工作副本。工作文件夹可以位于任何一个 Web 服务器上,但是在以团队方式进行开发时,选择正确的位置至关重要。
下图说明了多个开发人员如何以隔离方式,使用文件共享 Web 访问方法安全地并行开发主控 Web 项目。
Studio.NET中的Web项目和源代码管理集成1"/>
图1
由于每个开发人员都编辑主控 Web 项目的工作副本,因此文件共享 Web 访问方法支持共享签出。通过共享或多重签出,许多用户可以同时编辑项目文件并保存对项目文件的更改,而不必担心是否可能会覆盖另一个用户的更改。对于专业的开发团队而言,建议在共享或多签出模式下工作,因为这将有助于并行开发。
文件共享 Web 访问方法比 FrontPage 更具优势,因为它:
支持共享签出。通过共享签出,多个用户可以签出并编辑任何文件,即使其他用户已签出该文件。支持高级源代码管理命令,例如 branch、merge、pin 和label。允许进行隔离。团队成员可以在其个人计算机上编辑共享文件,然后安全地合并更改,而不会覆盖团队的主控副本。
请使用与 Microsoft 源代码管理接口 (MSSCCI) 兼容的任何源代码管理提供程序。FrontPage 访问方法仅适用于 Visual SourceSafe。
FrontPage Server Extensions
您还可以使用 FrontPage Server Extensions 配置 Visual Studio,以访问 Web 项目文件。在创建应用程序的服务器上,FrontPage 与Visual SourceSafe 集成在一起。来自 Visual Studio 的源代码管理请求通过 FrontPage Server Extensions 转发到 Visual SourceSafe 的服务器安装。
在Visual Studio.NET 中开发 FrontPage Web 项目时,存在一个工作副本。单版本项目驻留在 IIS Web 服务器上,在该服务器使用 HTTP 协议对其进行管理。下图说明了两个开发人员如何在由版本控制的 FrontPage Web 项目环境下进行交互操作。
Studio.NET中的Web项目和源代码管理集成1"/>
图2
注意:您不能通过 FrontPage Server Extensions 使用 Visual Studio 将项目添加到源代码管理,必须在创建该项目的 Web 服务器上手动添加该项目。
对于大多数应用程序而言,建议团队不要在 Visual Studio.NET 中使用 FrontPage Web 访问方法,因为它不利于有效的并行开发。源代码管理的 FrontPage Web 项目是以串行的方式进行开发的:一名开发人员一次编辑一个文件。然而在某些情况下,您必须使用 FrontPage Web 访问方法。
注意:如果您所在的团队以 LAN 或VPN 方式连接,您可以将现有的 Web 项目升级为新的文件共享访问方法。
共享签出
对于大多数专业开发团队,建议使用共享签出(或多签出模式)。通过共享签出,多个用户可以签出并编辑任何文件,即使其他用户已签出该文件。
如果您习惯于在独占签出模式下工作,则共享签出所导致的合并冲突可能(无法自动解决的重叠更改)比想象中要少。如果出现冲突,源代码管理提供程序通常会提供一种简单的方法来确定哪些更改需要保留,哪些更改需要放弃。
如果团队确实使用共享签出模式,那么在没有对 IDE 中的项目项事先执行 Get(获取)操作的前提下,千万不要使用Check In(签入)命令。从源代码管理获取最新版本后,您可以将个人更改与版本主控副本(如果上次签出以后发生了更改)合并,将已合并的项目保存到工作文件夹,然后测试该项目,以确保它仍然可以正常工作。如果在没有获取最新版本的 Web 项目的情况下尝试签入自上次签出后已发生更改的文件,则可能会以损坏的版本覆盖工作版本。在这种情况下,您有两种选择,但两种选择都不会令人满意:
可以在 Web 服务器上调试该项目。但对于 ASP.NET Web 项目来说,在您的工作完成之前,这样做可能会阻止其他开发人员使用该项目。在源代码管理中,您可以返回到最近的主控副本的正常版本,自上次签出项目后对工作副本所做的更改将会丢失。这种方法会导致数据丢失,因此建议您不要采用。另外,必要时最好在您自己的计算机上执行 Get(获取)操作并进行合并,而不要在服务器上执行签入及合并。
源代码管理提供程序以不同的方式处理共享签出。如果您使用的是 Visual SourceSafe 6.0c,则在默认情况下为独占签出。
在Visual SourceSafe 6.0 中实现共享签出
在源代码管理服务器上,单击“开始”按钮,指向“程序”,指向“Microsoft Visual SourceSafe”,然后单击“Visual SourceSafe 6.0 Admin”。单击Users(用户),单击Open SourceSafe Database(打开 SourceSafe 数据库),选择相应的数据库,然后单击Open(打开)。在Tools(工具)菜单中,单击Options(选项)。
在General(常规)选项卡上,选择Allow multiple checkouts(允许多重