暂做研究,因为可能会用到以后项目中。
首先需要在项目中引用
Microsoft.VisualStudio.SourceSafe.Interop
主要用到的是IVSSDatabase与IVSSItem这二个接口。
IVSSDatabase用来登录vss服务器,IVSSItem用来处理vss服务器上的文件
/// 从vss上获取指定的文件
///
/// vss数据库文件地址
/// 登录vss的用户名
/// 密码
/// 要获取的文件在vss上的项目地址,如:$/project/a.cs
/// 要保存的本地地址
static void GetVSSFile(string path, string username, string pwd, string filepath, string localPath)
{
VSSDatabase vssDatabase = new VSSDatabaseClass();
try
{
vssDatabase.Open(path, username, pwd);
}
catch
{
Console.WriteLine("Can't login to the VSS database");
return;
}
try
{
//在vss得到指定文件并返回VSSItem对象的实例,false表示不获取已删除的文件
VSSItem vssitem = vssDatabase.get_VSSItem(filepath, false);
//这里是获得版本号为1的文件
VSSItem vssitemVersion = vssitem.get_Version(1);
//调用Get方法保存文件
vssitemVersion.Get(ref localPath, 0);
Console.WriteLine("Download Success!");
}
catch (Exception ex)
{
Console.WriteLine("Download failed");
Console.WriteLine(ex.ToString());
}
}
代码很简单,注释已经写得很清楚了。
这里是只获取单个文件,如果要获取指定目录下的所有文件怎么办呢?
var a = vssitem.Parent; //得到文件的父路径
//调用get_Items方法得到所有的文件,此时的item是一个IVSSItem的接口
foreach (var item in a.get_Items(false))
{
Console.WriteLine(((VSSItem)item).Name);
}
VSSItem有很多的方法和属于可以去研究,如IsCheckedOut属性、Checkin方法是我们经常用到的。
需要说明的是,GetVSSFile方法中各参数的规则如下:
1. path,形如:\\192.168.100.83\vss_dev\srcsafe.ini,实际上是vss的数据库文件
2. filepath,形如$/project/xxx/StringProcess.cs
3. localPath,本地硬盘绝对路径,如C:\tt.cs
希望本文对也在研究C#与VSS交互的朋友有帮助