2008-11-13 134 views
3

我需要以编程方式从sourcesafe数据库获取文件。任何想法如何做到这一点?如何以编程方式从sourcesafe获取文件?

ps:我会通过使用C#来做到这一点。

+3

这个评论是一种强制性的,但得到从SourceSafe走为上就可以了,如果可能的话。 – MusiGenesis 2008-11-13 14:38:18

+0

几周后,我会的! :) – 2008-11-13 14:45:33

回答

10
using System; 
using System.Collections.Generic; 
using SourceSafeTypeLib; 

namespace YourNamespace 
{ 

public class SourceSafeDatabase 
{ 
    private readonly string dbPath; 
    private readonly string password; 
    private readonly string rootProject; 
    private readonly string username; 
    private readonly VSSDatabaseClass vssDatabase; 

    public SourceSafeDatabase(string dbPath, string username, string password, string rootProject) 
    { 
     this.dbPath = dbPath; 
     this.username = username; 
     this.password = password; 
     this.rootProject = rootProject; 

     vssDatabase = new VSSDatabaseClass(); 
    } 

    public List<string> GetAllLabels() 
    { 
     List<string> allLabels = new List<string>(); 

     VSSItem item = vssDatabase.get_VSSItem(rootProject, false); 
     IVSSVersions versions = item.get_Versions(0); 

     foreach (IVSSVersion version in versions) 
     { 
      if (version.Label.Length > 0) 
      { 
       allLabels.Add(version.Label); 
      } 
     } 

     return allLabels; 
    } 

    public void GetLabelledVersion(string label, string project, string directory) 
    { 
     string outDir = directory; 
     vssDatabase.get_VSSItem(rootProject, false).get_Version(label).Get(ref outDir, (int)VSSFlags.VSSFLAG_RECURSYES + (int)VSSFlags.VSSFLAG_USERRONO); 
    } 

    public void Open() 
    { 
     vssDatabase.Open(dbPath, username, password); 
    } 

    public void Close() 
    { 
     vssDatabase.Close(); 
    } 

} 


// some other code that uses it 

SourceSafeDatabase sourceControlDatabase = new sourceControlDatabase(...); 
sourceControlDatabase.Open(); 
sourceControlDatabase.GetLabelledVersion(label, rootProject, projectDirectory); 
sourceControlDatabase.Close(); 
2

有一个命令行SS.EXE程序,您可以调用来执行源代码管理操作。然而,它依赖于全局的SourceSafe配置,所以有时很难做到你想做的。

相关问题