5月,我们的纪念
2008-03
12

暂做研究,因为可能会用到以后项目中。

首先需要在项目中引用Microsoft.VisualStudio.SourceSafe.Interop

 

主要用到的是IVSSDatabase与IVSSItem这二个接口。

IVSSDatabase用来登录vss服务器,IVSSItem用来处理vss服务器上的文件

 

[code:c#]
        /// 从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());
            }
        }

[/code]

代码很简单,注释已经写得很清楚了。

这里是只获取单个文件,如果要获取指定目录下的所有文件怎么办呢?

[code:c#]

var a = vssitem.Parent;  //得到文件的父路径

//调用get_Items方法得到所有的文件,此时的item是一个IVSSItem的接口
                foreach (var item in a.get_Items(false))
                {
                    Console.WriteLine(((VSSItem)item).Name);
                }

[/code]

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交互的朋友有帮助

Categories:   学以致用
Tags:  
Actions:   Comments (2) |

Comments

1#

March 18 2008 , 14:44

老吧

俺就会asp 不会.net 不知从何下手,~~楼主给指个路

顺便做个友情链接啊,我做好了你的了。

老吧cn | Top

2#

March 18 2008 , 16:04

幻想曲

在上个回复已经说过了呀
blog暂停交换链接
你可以去
http://feed.lemongtree.com/Feed/NewFeed
提交你的rss0

幻想曲cn | Top

Add comment



(Will show your Gravatar icon)  



  Country flag


[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o


申请链接请看这里