在VS.NET IDE中集成VSS的常见问题

VSS与VS.NET IDE的集成会带来哪些好处?
好处:
1 可直接在 IDE CheckOut/CheckIn
2 在一台新机器上第一次打开 Solution 可为 Web Project 自动创建 IIS 虚拟目录。
3 VS.NET 自动判断不该添加到 VSS 中的文件,例如 suo *.vbproj.user 等,避免手工添加这些文件之后导致个人环境互相干扰的问题。
4 )文件更名特别方便,尤其是 aspx 文件更名时, VSS 中的 aspx.vb 以及相关的 resx 文件都能自动更名。
 
缺点:
1 VS.NET Source Control Add-in Bug ,经常出错,特别是调整 Solution 结构时。正确的 Folder 更名操作步骤很复杂,因此调整 Solution 结构特别麻烦。
2 )操作更要小心,有一定的培训 / 学习成本。
3 )打开 Solution 时,因为需要与 VSS Server 通讯,速度很慢,而且占用网络带宽和服务器资源。
4 Web 项目的工作目录总是在 wwwroot 下面,与 SourceSafe 中的项目层次结构不一致。
5 )想要临时修改某个文件调试一下,特别不方便(因为提示要 CheckOut ),尤其是修改 Project 文件(比如增加一个临时文件测试一下的时候)。
6 )创建 Project 的人,在第一次 Add to Source Control 时, VSS 将自动创建一个与 Solution 同名的 VSS Folder ,比如:本来想将 Purchase.sln 添加到 $/…/Src 之下,但是结果是添加到 $/…/Src/Purchase 之下。对于 Web Project ,其他人 Open From Source Control 时,工作目录都会变成 InetPub/wwwroot 下面的子目录,而创建 Project 的人的工作目录却是原先在 …/Src/ 下面的某个目录。
7 VS.NET 有很多 Bug ,导致操作出错或不便。比如:
  • Change Source Control对话框中,经常几个Project被捆在一起,选中一个就选中其他几个,无法单独设定绑定路经。
  • Unbind时,经常无法全选,这样在准备一个独立的、不绑定的开发环境时很费事。
  • Check In时,有时会提示一些不相干的文件,让你选择是否Check In,而事实上那些文件根本没有Check Out
 
想要将VSS与VS.NET IDE绑定,必须做什么准备工作?
1 )安装 VSS 客户端
安装程序在文件服务器上: //xafile/Share/MSDN/VSS/EN/VSS60d
CD Key: 111-1111111
2 )删除可能重名的 IIS VD
本机 IIS 最好没有任何自己创建的 VD (虚拟目录) ,否则,可能在打开 Solution 时被提示输入形如 VD_1 的工作目录。
另外, Inetpub/wwwroot 下面的同名目录也要删除,以免出错,尽管这种情况 VS.NET 不会提示 VD_1 样式的工作目录。
3 第一次从 VS.NET 打开 Solution 必须通过选择 File - Source Control - Open From Source Control 命令 不能用传统方法 Get 之后从本地硬盘直接打开 否则将无法自动创建 IIS VD
一个原来没有绑定的Solution,如何才能正确地实现绑定?
最保险的做法:
1 )将所有 Projects Solution Remove ,这样得到一个空的 Solution
2 VS.NET File – Source Control – Add to source control 命令
注意: Add to Source Control Project 对话框中,默认有一个 Project 名,形如 SoluionName.Root ,应该把这个内容清空,否则会在 VSS 中看到 $/SolutionName.Root/SolutionName 这样的重复目录结构。
3 Add Existing Project 命令添加原有 Projects Solutions 中。
4 Check In 那些添加进来的 Projects
此时 VS.NET 会提示 resx 文件用 UTF-8 编码,无法用 VSS 控制变更等,不用管它。
绑定前后,Solution中的哪些文件有变化?又有哪些本来没有的文件会自动产生?
1 )关键的改变只有 sln 文件,原有内容之后会添加一个 GlobalSection ,形如:
Global
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 53
SccLocalPath0 = .
CanCheckoutShared = false
SolutionUniqueID = {EFD7F1A3-3977-4BE8-AFFC-D33AB7D8546C}
SccProjectUniqueName1 = ..//..//WebFramework//Src//Frameworks.etp
SccProjectName1 = /u0022$/WebProjects/WebFramework/Src/u0022,/u0020J…
SccLocalPath1 = ..//..//WebFramework//Src
CanCheckoutShared = false
……
EndGlobalSection
EndGlobal
2 )自动产生的 SolutionName.vssscc 文件没有什么实质性内容。
3 )自动产生的 etpname. vspscc 或者 projectname.vspscc 文件没有实质内容。看起来比较重要的一行信息是:
"PROJECT_FILE_RELATIVE_PATH" = "relative:WindowsApplication1"
4 vbproj 文件会增加少量新内容。
<VisualStudioProject>
    <VisualBasic
        ProjectType = "Local"
        ProductVersion = "7.10.3077"
        SchemaVersion = "2.0"
        ProjectGuid = "{F894CF6B-BAC2-4F54-ACFA-DF317FFBBDBE}"
        SccProjectName = "SAK"
        SccLocalPath = "SAK"
        SccAuxPath = "SAK"
        SccProvider = "SAK"
    >
红字部分是新增内容 也不是很重要。这些内容将来可能导致在打开时提示 Seem to be under source control but…
伴随 vbproj 文件,本地目录中会产生一个 *.vbproj.webinfo 文件,内容是:
<VisualStudioUNCWeb>
    <Web URLPath = "http://localhost/webapp1/WebApp1.vbproj" />
</VisualStudioUNCWeb>
看起来还比较重要,但是还没有发现过因这个文件的信息错误导致问题。
注意:
C# 项目文件( csproj )中的 SccProjectName 不是“ SAK ”这么简单,例如:
SccProjectName = '"$/WebProjects/WebFramework/Src/ApplicationBlocks", KGBEAAAA'
这是跟 VB.NET 项目很不同的。
 
5 SS.ini 文件可能有变化 ,这是产生很多问题的根源,因此是特别要小心的!
SS.ini VSS 个人配置文件,这个文件在 VSSDB/Data/../Users/[username]/ 目录。其内容主要是 SSEXP 当前项目、窗口状态等,更重要的内容是每个 VSS Folder/Project 对应的本地工作目录。
要特别注意检查在 Open From Source Control 之后 这个文件中有没有多几行
其中 Web Project 肯定会改变工作目录 还算正常。比如
[$/]
Dir (XA-APP-LUO2K3J) = C:/MPROJECT
[$/WebProjects/Purchase1.0/Src/Purchase/PurchaseService]
Dir (XA-APP-LUO2K3J) = c:/inetpub/wwwroot/LeyserService/PurchaseService
[$/WebProjects/Purchase1.0/Src/Purchase/ApplicationUI/LeyserWeb]
Dir (XA-APP-LUO2K3J) = c:/inetpub/wwwroot/LeyserWeb
以上两个 Project 都是 ASP.NET Web Application 或者 Web Service 类型的 Project ,所以没有问题。
如果出现其他类型的 Project 工作目录也出现在这个文件中 例如
[$/WebProjects/WebFramework/Src/OtherFrameworks/NHibernate]
Dir (XA-APP-LUO2K3J) = C:/study/asp.net/ORM/nhibernate/src/NHibernate
[$/WebProjects/Purchase1.0/Src/Purchase/DataAccess]
Dir (XA-APP-LUO2K3J) = C:/WebProjects/Purchase1.0/Src/Purchase/DataAccess
上面这两个目录( Nhibernate Purchase.DataAccess.Order )中并没有 Web 项目, 就说明有问题 问题的原因有两种
l         sln 文件中包括了根本不存在的某个目录中的 Project Source Control 绑定信息。而这个 Project 是存在的,但是不是在绑定信息所描述的目录中。
l         sln 或者 etp 包含了非下级目录中的 Project 例如 C:/a/a.etp 包含一个 C:/b/b.vbproj
因此,一要仔细检查 sln 文件中的绑定信息,即 GlobalSection 部分;二要避免在 Solution 或者 etp 中包含其下级目录之外其他路径下的 Project 文件。
特别注意:
在调整 Solution 结构之后, Project 的存放路径、名称、所属 etp 发生变化,而 sln 文件却因为 VS.NET Source Control Add-in Bug 可能没有及时、正确地更新,往往就会导致问题。
与绑定有关的文件信息有哪些?它们之间是什么关系?出现问题的时候,是什么文件的什么内容与什么文件的什么内容不符了?
与绑定有关的文件信息包括:
l         Sln 文件中的 GlobalSection 信息
l         Etp 或者 proj 文件中的 scc* 信息
l         SolutionName.vssscc 或者 ProjectName.vspscc 文件中的信息
l         VSSDB/Users/username/ss.ini 文件中的工作目录信息
起关键作用、同时也最容易出问题的,其实只有 sln 文件中的 GlobalSection 信息
针对每个 Project ,主要是 5 个方面的信息:
SccProjectUniqueName1 = ProjName1//ProjName1.vbproj
SccProjectTopLevelParentUniqueName36 = …//.....etp
SccProjectName1 = /u0022$/Solution1/ProjName1/u0022,/u0020UAAAAAAA
SccLocalPath1 = ProjName1
SccProjectFilePathRelativizedFromConnection1 = …
出现问题的时候,就是这几项内容之间、或者其中某项内容与实际路径之间有差异。
尤其需要注意的是最后一项 SccProjectFilePathRelativizedFromConnection1 ,一般不出现,如果出现,一般都会导致问题。这项内容的出现往往伴随着 SccLocalPath=. ,这种情况下,就会出现多个项目具有相同的绑定路径的问题,参见附录中的( 7 )。
对于 Web 项目,还有一个描述 URL 信息的 webinfo 文件,这个文件与 sln etp 之间的内容不一致也是常见问题。
另一个检查重点是 ss.ini 中的工作目录设置 ,如果出现没必要的或者错误的工作目录设置,一般就会出现绑定的问题。
在一个已经绑定的Solution中,如何正确地添加新的etp和Project?
正确的添加步骤:
1 Add New Project
2 Check In 那些新项目
3 )保存所有文件(主要是为了保存 sln
最好用 SSExp 验证一下,然后关闭 Solution 再打开,再次验证。
在一个已经绑定的Solution中,如何正确地添加已经存在的etp和Project?
步骤上与添加新的 etp 或者 Project 没有差异 当然第一步是 Add Exsting Project 。但是 如果是过去曾经绑定过的 etp 或者 Project 最好删除对应的 vspscc 文件,以免 RelativePath 之类的信息导致问题。
 
一种特殊情况是:如果被添加的项目已经在其他 Solution 中绑定,那就不能 Unbind ,此时可以用 Add Project From Source Control 命令来添加,不要用传统的 Add Existing Project
已经绑定的情况下,如何修改Project所属的etp?
为了保险 不要直接 Remove 然后 Add Existing 。最佳做法:
1 Unbind project 。然后从现有 etp Remove
2 )删除可能存在的对应 Project vspscc 文件。
3 )将 Project 的目录移动到 etp 之下!!!
4 在新的 etp Add existing project
5 Save all 然后 Check In
6 )关闭并再次打开。
 
在Project中添加一个Form时,需要注意什么,对绑定有何影响?
要点是:一旦集成,那么所有操作都应该在 IDE 中进行,不要再用 SSExp.exe 进行手工操作。
添加文件至 VSS DB 时,如果采用集成操作,相关文件都能自动添加或更新;否则,手工添加很可能漏掉某些资源文件,或者漏掉什么更新操作。另外,有些与用户有关的文件是不能放进 VSS 的,包括 suo,*.vbproj.user 等,手工操作很可能把这些文件也添加进去,导致用户环境互相干扰。
 
如果需要修改一个Folder的名称,对绑定有何影响?
如果按照 MSDN 的文档,这个操作将包含 20 个步骤!之后还需要很多手工操作。
不如先 Unbind 单个 Project ,在外面改好之后,再添加进来,最后 Check In
另:
对于文件,可在 IDE Rename ,然后 CheckIn VSS 中的文件名将自动更新。
一个已经绑定的Solution,如何更快地Unbind?必须逐个Project地Unbind吗?
如果一切正常,可以在 VS.NET IDE 中成批 Unbind ,不需要逐个 Unbind
如果想要将一个绑定的Solution源代码复制到一个演示机器上,如何保证在演示机器上正确打开Solution,而且不看到任何警告或错误信息?
关键是要正确地 Unbind Unbind 之后,与 Source Control 有关的文件会被删除,项目文件中有关 Source Control 有关的信息也会被删除。
Web Project的两种开发模式有什么不同?对VSS绑定有何影响?
VS.NET 管理 Web 项目文件有两种方式: File Share FrontPage ,前者是 VS.NET 新提供的方法,后者是过去 Visual InterDev 的方法。
l         File Share 默认模式 ):利用 wwwroot$ 共享来修改文件,其共享权限设置为: ./Administrators ./VS Developers 都有 Full Control 权限。试验证明:如果是本地开发环境( VS.NET IIS 在同一台机器),即使没有这个共享也能正常打开。可见,用本地 IIS 开发时根本没有使用这个共享。
l         FrontPage All files are managed using the HTTP protocol. Source control requests from Visual Studio are forwarded through the FrontPage server extensions to the server installation of your source control provider (for example, Visual SourceSafe). The FrontPage access method does not support as many source control commands as File Share.  可见,两种模式的最大差别是支持的 VSS 操作命令不一样多 FrontPage 模式下,不能执行 Branch/Merge 等复杂操作。
注意:
尽管在集成状态下,一般都用 File Share 模式,但是 sln etp 中仍然需要用 http 路径来指定包含的 Web Project ,否则用 C:/Inetpub/wwwroot/ 这样的路径将导致不同机器上无法正确打开的问题。
 
为什么在添加一个新的Web Project的时候,提示说必须提供一个URL Path,而实际上本来就是URL Path?
这应该是 VS.NET IDE Bug 在绑定信息紊乱的时候 最好不要添加新的 Project
 
为什么提示http://localhost/ProjectName_1这样的URL Path?
VS.NET 总是将 Web 项目的工作目录放到 wwwroot 下面,并且设置虚拟目录 。如果现在的 IIS 中已经有重名的虚拟目录,就会提示 projectName_n 样式的 URL Path
如果不想看到这样的提示,应事先删除本地的同名虚拟目录。
 
Web Project打开失败的常见问题和原因是什么?
最常见的问题包括:
1 Cannot open project 之类的问题
原因是: Solution 文件( sln )中 GlobalSection 部分的信息紊乱,垃圾信息没有删除,或者有关工作路径的信息与实际路径不一致。
2 VSS 中显示的 Work Folder 信息混乱
除了 Web 项目之外,其他项目的工作目录应该与 VSS 中的结构一致,但是如果 Solution ETP 的结构与 VSS 中的 Folder 结构不一致 导致 VSS Users/username/SS.ini 中有关工作目录的信息多余或者与实际情况不一致。
3 Web 项目的 Location 提示 http://localhost/ProjectName_1
这是因为本地 IIS 中已经存在同名的虚拟目录。避免问题的办法是在 Open From Source Control 之前,删除本地的重名虚拟目录。
4 )多个项目绑定路径相同的问题
原因是 SccLocalPath 不正确,参见附录中的( 7 )。
 
为了避免少出现问题,应注意:
l         千万不要重复使用 Open Source Control 打开 Solution 。这个命令对一个 Solution 只能用一次 如果第一次失败 一定要清理硬盘上 Get 下来的文件 而且要删除 IIS VD 和物理文件。之后才能再次使用 Open From Source Control 尝试打开。
l         不要手工修改 etp sln 中包含的 Project 信息,特别是 Web Project http 路径不要改成 C:/Inetpub/wwwroot/ 路径。
l         不要在 sln 或者 etp 中添加其下级目录之外其他路径的项目。
 
对于常见问题的解决办法,参见附录。
References
Web Projects and Source Control Integration in Visual Studio .NET
ms-help://MS.VSCC...1033/sccvs70/html/vetchWebProjectsSourceControlIntegrationInVisualStudioNET_Convert.htm
 
附录:解决一个Solution绑定问题的步骤实录
 
以下是在使用 Open From Source Control 打开一个已经设置绑定的 Solution 时,遇到的问题和解决的详细过程:
(1) Web Project的Location问题
提示输入 Web Project 的工作拷贝的 Location 时,出现三个 Web 项目的列表,而实际上应该只有两个。
原因:其中一个 Web Project PurchaseWeb —原先在 wwwroot 下面,后来把它的源文件调整到另一个 Web Project LeySerWeb —下面的二级目录中,不再作为单独的 Project ,但是 sln 文件有关 Source Control 的信息却没有及时删除,成为垃圾信息。
具体步骤:
打开 sln 文件,找到如下信息:
-----------------
Global
GlobalSection(SourceCodeControl) = preSolution
SccNumberOfProjects = 56
SccLocalPath0 = .
CanCheckoutShared = false
SolutionUniqueID = {EFD7F1A3-3977-4BE8-AFFC-D33AB7D8546C}
...
SccProjectUniqueName33 = http://localhost/PurchaseWeb/PurchaseWeb.vbproj
SccProjectTopLevelParentUniqueName33 = Purchase//Purchase.etp
SccProjectName33 = /u0022$/…/Src/Purchase/ApplicationUI/PurchaseWeb/...
SccLocalPath33 = http://localhost/PurchaseWeb/
----------------
其中带有“ 33 ”字样的都是垃圾信息。用 Notepad 修改如下:
l         删除带有“ 33 ”字样的垃圾信息,包括 CanCheckoutShared = false
l         将最后一个 Project 的信息(标号为“ 55 ”)转移到原来“ 33 ”所处的位置。
l         将“ 55 ”改为“ 33 ”。
l         GlobalSection(SourceCodeControl) 下面第一行的 SccNumberOfProjects = 55 中的“ 56 ”改为“ 55 ”。
Task Manager 直接终止 VS.NET 之后,重新 Open From Source Control ,这个错误就没有了,仅显示两个 Web Project 的列表。
 
(2) Unable to read project file问题
重新打开时,确认 Web Project Location 之后,出现错误提示: Path not found: LeyserWeb.vbproj
原因:在包含该项目的 etp 文件中,指定了非 URL 路径。该 ApplicationUI.etp 文件部分内容为:
        <Views>
            <ProjectExplorer>
                <File>LeyserWeb/LeyserWeb.vbproj</File> *******
                <File>PurchaseWin/PurchaseWin.etp</File>
            </ProjectExplorer>
        </Views>
        <References>
            <Reference>
                <FILE>LeyserWeb/LeyserWeb.vbproj</FILE> *******
                <GUIDPROJECTID>{4ED7777B-…54774E1}</GUIDPROJECTID>
            </Reference>
将红字部分的路径修改为 URL 地址形式:
                <File>http://localhost/LeyserWeb/LeyserWeb.vbproj</File>
这个问题得到解决。
 
(3) Path not found问题
强行终止、重新打开 sln 时,出现提示: $/WebProject/.../Microsoft.ApplicationBlocks.Data was not found. Would you like to browse for the project?
这也是因为 VS.NET Bug ,没有及时更新有关的信息导致的问题。原先这个 Project 是在另一个 Folder 下面,包含在另一个 etp 中,现在调整了,结果 sln 中只有部分信息得到更新:
---------- 红字部分是没有正确更新的内容
SccProjectUniqueName44 = .. WebFramework//Src//ApplicationBlocks//Microsoft.ApplicationBlocks.Data//Microsoft.ApplicationBlocks.Data.vbproj
SccProjectTopLevelParentUniqueName44 = ..//..//WebFramework//Src//Frameworks.etp
SccProjectName44 = /u0022$/WebProjects/Purchase1.0/Microsoft.ApplicationBlocks.Data/u0022,/u0…
SccLocalPath44 = ..WebFramework//Src//ApplicationBlocks//Microsoft.ApplicationBlocks.Data
---------------
--------- SccProjectName44 部分修改成:
/u0022$/WebProjects/WebFramework/Src/ApplicationBlocks/u0022,/…
---------
这个问题就解决了。
(4) Project file not found问题
强行终止、重新打开 sln 时,出现提示: File not found: Microsoft.ApplicationBlocks.Data.vbproj
原因: sln 中有关这个项目的 SccLocalPath 信息不正确,结果导致该项目在 VSS 中的工作目录单独设置,而且设置成了不正确的路径。
 
有关工作目录的设置信息保存在下面这个文件中:
本来,只需要为 sln 文件所在目录设置工作目录,下级目录就会自动按照项目层次结构自动设置,不需要 ss.ini 中的单独设置。当然, Web 项目是一个例外,因为 Web 项目的工作目录总在 wwwroot 下面。对于其他项目,如果某个下级目录在 ss.ini 中存在工作目录设置信息,肯定就是有什么问题。
ss.ini 中有关工作目录的设置如下:
[$/WebProjects/WebFramework/Src/ApplicationBlocks]
Dir (XA-APP-LUO2K3J) = C:/MPROJECT/WebProjects/WebFramework/Src/ApplicationBlocks/Microsoft.ApplicationBlocks.Data
红字部分是多余的部分,出现这个错误的原因,是 sln 文件中的信息不正确:
--- sln.old
SccProjectUniqueName44 = ..//..//WebFramework//Src//ApplicationBlocks// 
          Microsoft.ApplicationBlocks.Data//Microsoft.ApplicationBlocks.Data.vbproj
SccProjectTopLevelParentUniqueName44 = ..//..//WebFramework//Src//Frameworks.etp
SccProjectName44 = /u0022$/WebProjects/WebFramework/Src/ApplicationBlocks/u0022,/…
SccLocalPath44 = ..//..//WebFramework//Src//ApplicationBlocks//Microsoft.ApplicationBlocks.Data
---
其中的红字部分是多余的。删除红字部分,然后从 ss.ini 中删除这个项目的工作目录设置,这个问题就解决了。
 
(5) Project does not exist问题
强行终止、重新打开 sln 时,出现提示: project does not exist。
这个问题的原因,是因为该 project 不在其所属 etp 的下级目录中,结果导致 ss.ini 中单独设置了工作目录,而 Open From Source Control 时, VS.NET 仍然将该 project 的文件 Get 到了 etp 文件所在目录的下级目录中(这应该也是 VS.NET Bug ),当然就找不到指定的 csproj 文件了。
ss.ini 中的信息如下:
[$/WebProjects/WebFramework/Src/OtherFrameworks/NHibernate]
Dir (XA-APP-LUO2K3J) = C:/study/asp.net/ORM/nhibernate-0.0.5000.6/src/NHibernate
Sln 文件中的相关信息如下:
SccProjectUniqueName33 = ..//..//..//..//study//asp.net//ORM//nhibernate-0.0.5000.6//src//NHibernate//NHibernate-1.1.csproj
SccProjectTopLevelParentUniqueName33 = ..//..//WebFramework//Src//Frameworks.etp
SccProjectName33 = /u0022$/WebProjects/WebFramework/Src/OtherFrameworks/NHibernate/…
SccLocalPath33 = ..//..//..//..//study//asp.net//ORM//nhibernate-0.0.5000.6//src//Nhibernate
其中的红字部分就是不合适的,说“不合适”,是因为当初添加时该项目就是在 etp 所在目录之外,所以不能说是错误。但是,因为 VS.NET 没有按照指定的目录 Get ,导致项目无法打开,仍然是 VS.NET 的问题。
 
先删除 ss.ini 中错误的工作目录设置,然后手工修改 etp 文件,将 project 的路径改为 etp 下面的子目录,保存后手工 CheckIn 这个 etp 文件,就可以解决这个问题。
 
(6) sln中的垃圾信息的问题
修改一个项目的目录名可能导致 sln 文件中的垃圾信息,然后导致 ss.ini 中的垃圾信息,进而导致项目无法打开。
在看到 Purchase.DataAccess.Order 项目无法打开的提示之后,检查 ss.ini 发现一条垃圾信息:
[$/WebProjects/Purchase1.0/Src/Purchase/DataAccess/Purchase.DataAccess.Order]
Dir (XA-APP-LUO2K3J) = C:/MPROJECT/WebProjects/Purchase1.0/Src/Purchase/DataAccess/Purchase.DataAccess.Order
与其他工作目录设置垃圾信息不同的是:这条信息指向的工作目录是正确的,而且也符合整个 Solution 的层次结构!
 
检查 sln 文件,发现有两个有关 Purchase.DataAccess.Order.vbproj source control 信息,其中一个是垃圾信息:
SccProjectUniqueName36 = Purchase//DataAccess//Order.DataAccess//Purchase.DataAccess.Order.vbproj
SccProjectTopLevelParentUniqueName36 = Purchase//Purchase.etp
SccProjectName36 = /u0022$/WebProjects/Purchase1.0/Src/Purchase/DataAccess/Purchase.DataAccess.Order/u0022,/u0020YEEEAAAA
SccLocalPath36 = Purchase//DataAccess//Order.DataAccess
CanCheckoutShared = false
其中,红字部分实际上已经修改为 Purchase.DataAccess.Order ,另外一条有关同一 vbproj 的信息正是修改后的路径。这应该也是 VS.NET Bug 导致的问题。
删除这条垃圾信息,并调整 SccNumberOfProjects 等信息之后,这个问题就解决了。
 
(7) 多个项目绑定路径相同的问题
如果 sln 有问题,可能导致很多项目的 Server Binding 路径相同,结果是:在 Change Source Control 对话框中,这些项目不能单独选中,选中一个,其他相同绑定路径的项目也会被一起选中。
 
问题原因:
SccLocalPath 不正确,一般是 SccLocalPathxx = . ,本来应该是一个相对路径。另外,多出一个 SccProjectFilePathRelativizedFromConnection 设置。
还有一个“症状”是: vbproj.vspscc 文件中会有内容:
"PROJECT_FILE_RELATIVE_PATH" = "relative:Purchase//BusinessFacade//Pruchase.Facade.SupplierAndRep"
解决办法:
SccProjectFilePathRelativizedFromConnection 的内容转到 SccLocalPath ,然后删除前者,即:
SccProjectUniqueName49 = ….SupplierAndRep.vbproj
SccProjectTopLevelParentUniqueName49 = Purchase//Purchase.etp
SccLocalPath49 = .
CanCheckoutShared = false
SccProjectFilePathRelativizedFromConnection49 = Purchase//BusinessFacade//Pruchase.Facade.SupplierAndRep//
修改为:
SccProjectUniqueName49 = ….SupplierAndRep.vbproj
SccProjectTopLevelParentUniqueName49 = Purchase//Purchase.etp
SccLocalPath49 = Purchase//BusinessFacade//Pruchase.Facade.SupplierAndRep
CanCheckoutShared = false
 
另一种情况, SccLocalPath 不是句点,有内容,但是实际的项目文件不是在所属 etp 的下级目录中,结果就出现很多“ ..// ”样式的相对路径:
SccProjectUniqueName8 = ..//..//WebFramework//Src//ApplicationBlocks//Security//src//cs//Security//Security.csproj
SccProjectTopLevelParentUniqueName8 = ..//..//WebFramework//Src//Frameworks.etp
SccProjectName8 = /u0022$/WebProjects/WebFramework/Src/ApplicationBlocks/u0022,/...
SccLocalPath8 = ..//..//WebFramework//Src//ApplicationBlocks
CanCheckoutShared = false
SccProjectFilePathRelativizedFromConnection8 = Security//src//cs//Security//
对于这种情况,修改了 SccLocalPath 也不行。检查发现,这些 C# Project csproj 文件中,存在 SccProjectName 信息,例如:
SccProjectName = '"$/WebProjects/WebFramework/Src/ApplicationBlocks", KGBEAAAA'
而对于 VB.NET 项目, vbproj 文件中只有很简单的信息:
SccProjectName = "SAK"
 
因此, C# 项目与 VB.NET 项目的绑定信息管理是有差异的
不管怎样,最好是将不是保存在 sln 文件所在目录之下的项目从 solution 中删除(当然,除了 Web 项目);或者,将 sln 文件放到所有项目文件目录最外面的某个目录中。总之是避免出现“ ..// ”这样的相对路径。
 
提示:
l         只要出现 SccProjectFilePathRelativizedFromConnection ,肯定就是有问题!
l         要避免 etp 包含其下级目录之外路径中的 Project ,也要避免 sln 中包含其下级目录之外路径中的 etp 或者 Project
 
(8) SccProjectName信息丢失的问题
Change Source Control 对话框中,发现很多项目的 Server Binding 都显示红色波浪号。
 
退出 IDE 之后,发现 ss.ini 中多了很多 Work Folder 设置,大多数是不需要的(可以根据上级目录的工作目录确定),另有一个是错误的:
[$/WebProjects/Purchase1.0/Src]
Dir (XA-APP-LUO2K3J) = C:/MPROJECT/WebProjects/Purchase1.0/Src/Purchase.UnitTest/Purchase.Test.Order
检查 Purchase.Test.Order 下面的内容,是一个同名的 Project
然后检查 sln 文件,发现所有显示 Invalid 状态的项目都缺少 SccProjectName 信息。
解决办法:
l         删除 ss.ini 中的工作目录设置。
l         Check Out 并重新打开 sln
l         重新设置 Status Invalid 的项目的 Server Binding 。此过程中,可能需要 Check Out 一些项目文件(包括 etp 文件)。
l         Check In 发生变化的 sln etp vbproj csproj 等文件。
 
(9) Check In提示多余文件的问题
IDE 环境中 Check In 时,对话框中显示出的文件列表包括一些根本没有 CheckOut 的文件。
检查发现,这些多余文件有三种可能:
l         没有设置 Server Binding 的项目文件。
l         尽管还在原先的 Project 中,但是在 VSS 中被移动到其他子目录了。
l         项目中的隐藏文件,没有被添加到 VSS 中。例如上图中的 nhibetnate-mapping-2.0.xsx 文件。
 
对于这些文件, Check In 的含义实际上是 Add to SourceSafe 。对于移动过位置的文件,应在 Check In 之后,手工删除 VSS 中原位置的垃圾文件。
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VSS概述 Microsoft Visual SourceSafe是美国微软公司出品的版本控制系统,简称VSS。它提供了还原点和并行协作功能,从而使应用程序开发组织能够同时处理软件的多个版本。该版本控制系统引入了签入和签出模型,按照该模型,单个开发人员可以签出文件,进行修改,然后重新签入该文件。当文件被签出后,其他开发人员通常无法对该文件进行更改。通过源代码管理系统,开发人员还能够回滚或撤消任何随后产生问题的更改。 作为一种版本控制系统,Visual SourceSafe 能够: • 防止用户无意丢失文件。 • 允许回溯到以前版本的文件。 • 允许分支、共享、合并和管理文件版本。 • 跟踪整个项目的版本。 • 跟踪模块化代码(一个由多个项目重用或共享的文件)。 独立开发人员和小型开发团队已经发现,版本控制能够使他们保持内心的宁静并提高工作效率,从而使他们受益。Visual SourceSafe 是一种版本控制产品,主要致力于维护文件更改历史记录、审核跟踪日志以及对源代码文件进行灾难恢复。它在以下场合下最为有效:团队的规模较小,各个成员之间的地理距离比较近,通常在高度可靠的环境通过高速、低延迟的局域网 (LAN) 工作,并且共享的开发资产不大可能超过 4 GB。Visual SourceSafe 是一种仅用于客户端的文件服务器应用程序,不需要服务器端处理或代码执行。 1.1 VSS的文件 当你要修改某个文档时,需要先从数据库将它签出(check out),或者告诉VSS你要编辑该文档。VSS会将该文档的副本从数据库拿到你的工作文件夹(working folder),你就可以修改你的文档了。如果其他用户再想对同一文档进行修改,VSS会产生一个信息,告诉他,该文档已被签出(check out),从而避免多人同时修改文档,以保证文档的安全性。 当你完成修改之后,需要将文档 签入(check in)VSS。这个操作从你的工作文件夹(working folder)复制被你修改的文档,并将它放回VSS数据库,以便其他用户能够及时看到文档的改动。VSS能够保存文档的所有改动,并显示最新版本,同时早期版本也会被跟踪记录下来。VSS对反增量技术的运用,仅需要用很少的磁盘空间就能使得用户获取文档的所有版本。 如果你没有修改文档,你可以执行撤消签出(undo check out)命令,文档将被保存为被签出(check out)之前的状态。 如果你只需读取某一文档而并不需要编辑它,你可以执行取出(get)命令,将文档放入你的工作文件夹,再选择查看文档(view),来查看你的文档的最新版本。 1.2 VSS的项目 项目(project)是指用户存储在VSS数据库的所有文件(file)的集合。用户可以在项目之间或项目内部实现文件的添加(add)、删除(delete)、编辑(edit)、共享(share)。一个“项目(project)”在很大程度上类似于一个普通系统的的文件夹,不同的是它能更好地支持文件合并(merge)、跟踪(archive)和版本控制(version control)功能。 文件保存在VSS数据库的项目(project)里。你无须管理存储在VSS 的文件正本,除非你要检查或与其它拷贝进行比较。 VSS为每一位用户提供了一份备份文件放入工作文件夹(working folder),供用户对文件进行查看与编辑。尽管没有工作文件夹也可以查看文件,但要想真正实现对文档的处理,必须建立工作文件夹。 1.3 VSS的版本控制功能 VSS能够保存文件的多个版本,包括文件版本之间每一处微小的变动。版本控制有以下几方面的内容: l 组内合作——在缺省的情况下,一般一个文件在某一时间只允许一个用户对其进行修改,这样可以防止文件意外地被其他用户改动或者覆盖。但管理员可以改动这种缺省的设置,允许文件多层签出。这种设置也能防止过多的、不必要的改动。 l 版本追踪——VSS能够对源代码和其他文件进行存储和早期版本的追踪,从而实现重建文件早期版本等有关功能。 l 跨平台开发——在多平台开发的情况下,版本追踪用于维护核心代码。 l 代码的再使用—— 追踪程序基准使得代码可重用。 1.4 文件的拆分和共享 在VSS可以实现一个文件被多个项目共享(share)。在一个项目对文件的改动可以自动反映到其他共享的项目去。这正提倡了代码重用。在file菜单properties,点击link,可以查看某一文件的共享情况。 拆分(branch)是将文件从原来共享的项目分离出来的过程。它使得VSS可以实现从不同的路径追踪文件。 注:在其他版本控制系统,分支是通过跟踪版本号来实现的。例如:版本“2.3.9.2”是版本2.3的第二个修订版本的第九个分支。而VSS通过明显不同的项目名称实现对文件分支的跟踪。 拆分文件就断开了共享连接,使得本项目的文件与其他原来共享的项目无关。对此文件的修改将不会再反映到其他项目上。拆分是这样被建立的:两个文件以前有着共同的历史记录,从实现拆分开始,他们的历史记录将被VSS分别追踪。 拆分文件之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单properties项)按纽浏览拆分的历史记录。 共享(share)文件就是在多个项目间建立文件的连接。拆分(branch)文件就是在项目之间建立了不同的文件路径。 1.5 工作文件夹(working folder) VSS是存储和管理文件的工具,但是编辑和编译文件必须在VSS指定文件夹进行。这个文件夹叫工作文件夹,它可以是现存的文件夹,也可以是VSS新建的文件夹。VSS浏览器在文件列表上方显示了文件的工作文件夹的路径。 在VSS系统工作文件夹才是你真正用于处理文档的地方。当你要编辑或修改某个文档时,必须对文档实施check out 操作(详见3.3.5修改和编辑文件),VSS将该文档从项目拷贝出来,放入你的工作文件夹。当你修改完毕并check in 文件之后,VSS又将文件重新拷贝到数据库以记录你的修改。 一旦你将文件签出,VSS就开始在你的本地机上创建并管理你的工作文件夹。 每一个用户、每一个项目或每一台微机都可以有自己的工作文件夹。如果Joe在项目$/SpreadSheet和$/WordProcessor上工作,他就有相应的2个不同的工作文件夹。如果Hanna在同样的项目上工作,对于每一个项目她又有自己的工作文件夹。 当你为某个项目设置了工作文件夹,你可以用它来放置你该项目包括子项目再内的所 VSS服务器端安装 Visual SourceSafe 管理员通常将 Visual SourceSafe 安装到网络服务器上,然后将您的名称添加到数据库用户列表。只需运行安装程序,然后选择某个选项以安装 Visual SourceSafe。 1 有三个 Visual SourceSafe 安装选项: 1)数据库服务器 将数据库和所需的软件安装到网络服务器上(系统管理员使用该选项)。然后,各个用户使用 Netsetup 从网络服务器安装 Visual SourceSafe 客户程序。 2)自定义 允许您选择要安装的组件。 3)独立 安装创建和访问您的计算机上专用数据库所需的组件。另外,还可以连接到网络服务器上的现有数据库。 2 指派用户权限 在可以访问数据库之前,必须指派相应的权限。另外,还可以将用户权限指派给其他要共享您的数据库文件的小组成员。请 Visual SourceSafe 系统管理员添加、更改或删除数据库的用户权限和密码。 3 连接到 Visual SourceSafe 数据库 从 Visual SourceSafe 应用程序连接到 Visual SourceSafe 数据库,启动 Visual SourceSafe 应用程序。 从“文件”菜单,单击“打开 SourceSafe 数据库”,然后在列表框选择一个数据库。 可以使用此命令从其他人已经创建的 Visual SourceSafe 项目选择一个现有的数据库。这样您就可以使用由他人建立的多开发人员项目了。 2 VSS的客户端安装 从网络安装VSS客户端 1)打开本地计算机的“网上邻居”属性对话框; 2)点击“配置”按纽; 3)将“MICROSOFT网络用户”的属性设置为:登录到WINDOWS NT 域,域名为PLANNING; 4)添加TCP/IP、NETBEUI、IPX/SPX协议; 5)重新启动计算机,登录“planning”域; 注:管理员为每位NT用户设置的登录密码为“111”,用户在第一次登录时,计算机会提示用户修改密码。 6)从“网上邻居”的“planning”域查找服务器“VSSDATA”; 7)打开共享的“VSS”文件夹并双击“NETSETUP”; 8)按照安装程序的提示开始安装。 3 VSS的基本使用操作 3.1 登录VSS 点击VSS图标或从程序菜单运行Visual SourceSafe 6.0,即可打开VSS浏览器。 如果用户登录的VSS密码和登录PLANNING域的密码是一致的,系统将不再提示输入进入VSS数据库的密码;如果用户为VSS设置的密码与登录PLANNING域的密码不同,系统将提示用户输入VSS的登录密码。关于如何修改VSS用户密码,详见“3.2.14修改用户密码”。 3.2 VSS浏览器 当你一打开VSS,如果你设定了密码的话,它会提示你输入密码。如果你没有设定密码,你可以直接看到浏览器。在浏览器上,你可以浏览你的数据库、查看项目列表、显示文件统计信息、执行命令对文件和项目进行操作等。浏览器的最上方的标题栏是你当前连接的数据库。VSS使用符号来提供有关文件和项目信息。 菜单栏的下面是常用工具栏,这里有许多常用命令的按纽,它可以帮你快速地执行对文件的操作。 在项目栏,显示有项目列表,包括特殊项目的有关信息。文件栏显示了当前项目的所有文件的列表。结果栏显示当前你所执行的操作的结果。 3.3 VSS基本操作 3.3.1创建新的文件夹 1) 选要创建新文件夹的项目(上级文件夹); 2) 在file菜单creat project; 3) 写入要添加的文件夹的名称,同时也可以在comment栏为新建的文件夹添加备注; 4) 点击OK。 3.3.2添加文件夹 1) 选你要添加文件夹的项目(上级文件夹); 2) 在file菜单add files; 3)在文件夹列表要添加的文件夹; 4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注; 5)如果你要连同子文件夹一起添加,选择Recursive; 5) 点击OK,成功添加了一个带有备注的文件夹。或者点击close,退出操作,返回add files对话框,点击close。 3.3.3添加文件 3.3.2.1使用add命令添加文件 1)选你要添加文件的文件夹; 2) 在fil菜单add files; 3) 在文件列表要添加的文件;如果要添加多个文件,可以使用CTRL键或SHIFT键,同时选多个文件; 4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注; 5)点击OK。 3.3.2.2用拖动的方法添加文件/文件夹 1)打开VSS浏览器,调整其大小,使得Windows资源管理器能够显示出来; 2)打开Windows资源管理器,调整大小,使得两个浏览器可以同时显示; 3)从Windows资源管理器选择你要添加的文件或文件夹; 4) 拖动你所选的文件或文件夹,放入VSS浏览器,文件被添加进项目,而添加的文件夹将作为项目的子项目。 3.3.3查看文件 1) 在文件列表要查看的文件; 2) 在EDIT菜单view,打开对话框; 3)选view SourceSafe’s copy of this file; 4)点击OK。 3.3.4创建工作文件夹 在执行签入(check in)、签出(check out)、撤消签出(undo check out)、取出最新版本(get latest version)和文件合并(merge branches)等命令时都必须使用工作文件夹。工作文件夹可以随时设定或修改,VSS系统可以通过两种方式设置工作文件夹。 3.3.4.1专门创建工作文件夹 1) 在VSS浏览器的文件或项目列表要设置工作文件夹的文件/文件夹; 2) 在file菜单选择set working folder,打开对话框; 3) 在资源管理列表选择或新建文件夹; 4) 点击OK。 3.3.4.2利用check out操作设置工作文件夹 在对文件执行check out操作时,如果该文件还没有设置工作文件夹,系统会提示用户为文件创建或指定工作文件夹,用户可以根据系统的提示对文件进行工作文件夹的设置。 3.3.5修改和编辑文件 1) 在edit菜单edit file,打开对话框; 2) 选择check out this file and edit it in your working folder; 3) 点击OK。 注:如果用户已经为文件设置了工作文件夹,VSS会将该文件的一个COPY放入你的工作文件夹并打开文件,让用户进行修改和编辑;如果用户还没有为文件设置工作文件夹,VSS系统会提醒用户设置工作文件夹,用户可根据系统提示,先设置工作文件夹,才可以对文件进行编辑。 3.3.6移动文件/文件夹 3.3.6.1移动文件 你只有一种方法移动文件:将文件共享(share)到项目,再将其从原来的项目delete或是destroy。移动文件后,历史信息仍然有效。但是你不能用move命令来移动单个的文件。 3.3.6.2移动文件夹(project) 注:要使用移动(move)命令,必须先请管理员为你设置对移动目的项目的添加(add)权限和对源项目文件的破坏(destroy)权限。 使用移动命令你可以重新定位子文件夹,将其从一个文件夹移动到另一个文件夹。这个命令重新定义了被移动文件夹的路径。 这个命令不可以重命名文件;你只能通过执行重命名命令来实现它。这个移动命令不会改变文件夹的内容或其子文件夹的历史信息,它只会影响到新的和旧的上级文件夹的历史信息。 警告:当你移动一个文件夹之后,就不能再如实地重建其上级文件夹的早期版本。 移动文件夹的具体操作步骤如下: 1) 选要移动的文件夹; 2) 在file菜单move,打开对话框; 3) 在列表选择目标文件夹; 4) 点击OK。 3.3.7共享文件/文件夹(share) 1) 在VSS浏览器选择你要共享的目标项目。 2) 在SourceSafe菜单选择share,打开共享对话框。 3) 在file to share列表选择你要共享的文件,如果文件没有显示,可以旁边的项目列表查找。 4) 点击share。 5) 点击close。 3.3.8拆分文件(branch) 3.3.8.1拆分被共享的文件 1) 在浏览器你想要拆分的文件; 2) 在SourceSafe菜单选择branch,打开拆分对话框; 3) 在comment填写备注; 4) 点击OK。 3.3.8.2用一步操作完成文件的拆分与共享 1) 在VSS浏览器选择你要branch/share的项目; 2) 在SourceSafe菜单打开share对话框; 3) 在file to share列表选择要共享的文件,如果你要的文件没有显示,在项目列表 3.3.9删除/恢复文件或文件夹 如果想从VSS移走某个文件,你必须首先确定是仅仅从项目移走,还是从VSS数据库移走。你还必须确定是要删除文件,但使其能够恢复,还是永久性地破坏它。 VSS有以下三种途径可以实现从数据库移走文件。 3.3.3.9.1删除(delete) 将文件从项目移走。该文件仍然存在于你的VSS数据库和其它共享该文件的项目,你可以恢复它。此命令同样适用于项目。 1) 选择文件或项目; 2) 选择file菜单的delete命令; 3) 点击OK。 3.3.3.9.2破坏(destroy) 删除(delete)对话框有永久性破坏(the Destroy Permanently)选项,你一旦选它,文件或项目将从VSS数据库被移走,你不能再恢复它。此外,当Destroy 和Destroy Permanently命令用于共享文件时,它只作用于当前文件夹,其它共享的文件夹仍然保留该文件,该文件依然保存在VSS数据库。 1) 选择文件或项目; 2) 选择file菜单的delete命令; 3) 选 Destroy Permanently 选项; 4) 点击OK。 3.3.3.9.3清除(Purge) 这个命令将永久性地移走你已经删除的文件或项目,但没有破坏它。你可以使用这一命令清空你的文件或项目的所有内容,但不能恢复它们。 1) 在VSS浏览器项目; 2) 打开file菜单的properties对话框,按delete按纽; 3) 在列表选择要清除的文件名; 4) 点击purge; 5) 如果要继续,在VSS给你的提示栏点击yes。 3.3.10查看文件/文件夹的历史信息或早期版本 在历史信息保存有每一个文件的详细信息。在history对话框,你不仅可以浏览到文件的版本信息、备注、以及文件的相关历史记录,也能够获取文件的某个旧版本。 注:只有文件(file)可以从历史信息check out,文件夹(project)不能从check out。 你还可以从历史信息对话框执行get、check out、diff、pin、unpin、roll back和reprot等操作。 要查看历史信息: 1) 在tool菜单选show history,打开history options对话框; 2) 点击OK。 3.3.11获取文件的最新版本 1) 选择你要操作的文件,也可以是多个文件或某个项目; 2) 在SourceSafe菜单选择get latest version; 3) 如果你事先没有设定工作文件夹,VSS会提示你是否设定一个工作文件夹,点击OK,设定一个工作文件夹; 4) 如果你已经确定了选项,VSS就会显示get latest version对话框,你就可以从当前的项目获取文件的最新版本的备份,它放在你的工作文件夹。 3.3.12获取文件的早期版本 1) 选你要查看的文件; 2) 在tool菜单show history,打开history option对话框; 3) 点击OK,打开history对话框; 4) 选你要看的版本; 5) 点击get,打开get对话框; 6) 如果你事先没有设定工作文件夹,VSS会提示你是否设定一个工作文件夹,点击OK,设定一个工作文件夹; 7) 在取出对话框点击OK,文件版本的备份就会从当前项目调入你的工作文件夹。 3.3.13修改用户密码 使用更改密码命令来设置或更改你的密码。要更改密码,必须首先知道当前的密码,如果你忘记了自己的密码,请与管理员联系。 登录的时候,VSS会提示你输入密码以确认你的身份。如果管理员为你设置的用户名与你的网络名是相同的,VSS将不会再提示你输入密码。 注:你的VSS的密码可以与你使用的操作系统的密码相同,也可以不同,它并不会替换你操作系统的密码。 如何更改密码: 1) 从tool菜单打开change password对话框; 2) 在旧密码框里键入你当前的密码; 3) 在新密码框里键入你的新密码; 注:密码可以设1到15个字符,它以*的形式显示; 4) 在确认框里再次键入新密码; 5) 点OK。 3.3.15打开/关闭数据库 如果你使用了VSS,你的文件和项目就会被存储在一个数据库。它安全地保存你的信息并为你提供重要的历史信息和版本跟踪。要创建新的数据库,要与VSS管理员联系。 3.3.15.1打开现有的数据库 要运行你的VSS,你必须与存储你的文件的数据库连接。这一步通常由VSS自动完成,除非你要选择其他的数据库。如果数据库还没有安装,请与管理员联系。 1) 从file菜单,选择open SourceSafe database,打开对话框; 2) 从数据库列表选择一个数据库; 3) 点击open,打开数据库。 3.3.15.2关闭数据库 你只能在一个数据库进行工作。因此,如果要关闭一个数据库,只需打开另一个数据库即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值