C# 连接到tfs并下载VS2010中的文件

C# 连接到tfs并下载VS2010中的文件,c#,visual-studio-2010,tfs,C#,Visual Studio 2010,Tfs,我想连接到TFS并下载其中的文件。我正在使用VS2010,并尝试了以下代码。但我似乎在某个地方出了问题: GetItem()和CopyTo()方法的“非静态字段方法需要对象引用” 我的代码没有下载所有文件 C#代码: static void Main(字符串[]args) { 字符串teamProjectCollectionUrl=”https://YourTfsUrl/tfs/YourTeamProjectCollection"; string filePath=“C:\project\myf

我想连接到TFS并下载其中的文件。我正在使用VS2010,并尝试了以下代码。但我似乎在某个地方出了问题:

GetItem()和CopyTo()方法的“非静态字段方法需要对象引用”

我的代码没有下载所有文件

C#代码:

static void Main(字符串[]args)
{
字符串teamProjectCollectionUrl=”https://YourTfsUrl/tfs/YourTeamProjectCollection";
string filePath=“C:\project\myfile.cs”;
tfstreamprojectcollection teamProjectCollection=tfstreamprojectcollectionfactory.GetTeamProjectCollection(新Uri(teamProjectCollectionUrl));
VersionControlServer VersionControlServer=teamProjectCollection.GetService();
Item Item=versionControlServer.GetItem(文件路径,VersionSpec.Latest);
string fileString=string.Empty;
使用(Stream=item.DownloadFile())
{
使用(MemoryStream MemoryStream=new MemoryStream())
{
stream.CopyTo(memoryStream);
使用(StreamReader StreamReader=newstreamreader(newmemoryStream(MemoryStream.ToArray()))
{
fileString=streamReader.ReadToEnd();
}
}
}
Console.WriteLine(文件字符串);
Console.ReadLine();
}

有谁能帮我找到合适的方法吗?

试试这样的方法

    static void Main(string[] args)
    {
        string teamProjectCollectionUrl = "http://myserver:8080/tfs/DefaultCollection";
        string serverPath = "$/My Project/My SubFolder";
        string localPath = @"c:\temp\download";

        TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(teamProjectCollectionUrl));
        VersionControlServer versionControlServer = teamProjectCollection.GetService<VersionControlServer>();

        foreach (Item item in versionControlServer.GetItems(serverPath, VersionSpec.Latest, RecursionType.Full, DeletedState.NonDeleted, ItemType.Any, true).Items)
        {
            string target = Path.Combine(localPath, item.ServerItem.Substring(2));

            if (item.ItemType == ItemType.Folder && !Directory.Exists(target))
            {
                Directory.CreateDirectory(target);
            }
            else if (item.ItemType == ItemType.File)
            {
                item.DownloadFile(target);
            }
        }
    }
static void Main(字符串[]args)
{
字符串teamProjectCollectionUrl=”http://myserver:8080/tfs/DefaultCollection";
字符串serverPath=“$/My Project/My SubFolder”;
字符串localPath=@“c:\temp\download”;
tfstreamprojectcollection teamProjectCollection=tfstreamprojectcollectionfactory.GetTeamProjectCollection(新Uri(teamProjectCollectionUrl));
VersionControlServer VersionControlServer=teamProjectCollection.GetService();
foreach(versionControlServer.GetItems中的项项(serverPath,VersionSpec.Latest,RecursionType.Full,DeletedState.NonDeleted,ItemType.Any,true)。项)
{
字符串target=Path.Combine(localPath,item.ServerItem.Substring(2));
如果(item.ItemType==ItemType.Folder&&!Directory.Exists(target))
{
CreateDirectory(目标);
}
else if(item.ItemType==ItemType.File)
{
item.DownloadFile(目标);
}
}
}

试试这样的方法

    static void Main(string[] args)
    {
        string teamProjectCollectionUrl = "http://myserver:8080/tfs/DefaultCollection";
        string serverPath = "$/My Project/My SubFolder";
        string localPath = @"c:\temp\download";

        TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(teamProjectCollectionUrl));
        VersionControlServer versionControlServer = teamProjectCollection.GetService<VersionControlServer>();

        foreach (Item item in versionControlServer.GetItems(serverPath, VersionSpec.Latest, RecursionType.Full, DeletedState.NonDeleted, ItemType.Any, true).Items)
        {
            string target = Path.Combine(localPath, item.ServerItem.Substring(2));

            if (item.ItemType == ItemType.Folder && !Directory.Exists(target))
            {
                Directory.CreateDirectory(target);
            }
            else if (item.ItemType == ItemType.File)
            {
                item.DownloadFile(target);
            }
        }
    }
static void Main(字符串[]args)
{
字符串teamProjectCollectionUrl=”http://myserver:8080/tfs/DefaultCollection";
字符串serverPath=“$/My Project/My SubFolder”;
字符串localPath=@“c:\temp\download”;
tfstreamprojectcollection teamProjectCollection=tfstreamprojectcollectionfactory.GetTeamProjectCollection(新Uri(teamProjectCollectionUrl));
VersionControlServer VersionControlServer=teamProjectCollection.GetService();
foreach(versionControlServer.GetItems中的项项(serverPath,VersionSpec.Latest,RecursionType.Full,DeletedState.NonDeleted,ItemType.Any,true)。项)
{
字符串target=Path.Combine(localPath,item.ServerItem.Substring(2));
如果(item.ItemType==ItemType.Folder&&!Directory.Exists(target))
{
CreateDirectory(目标);
}
else if(item.ItemType==ItemType.File)
{
item.DownloadFile(目标);
}
}
}

“但我好像在什么地方出错了。”-请详细说明一下好吗?我想下载TFS服务器中的所有文件。即使是添加的新文件也应下载。但我的代码并不是下载所有的文件。另外,对于GetItem()和CopyTo()方法,我还收到了错误“非静态字段方法需要对象引用”@罗伊斯坦克斯·乌拉尔。我已经把你的评论纳入了你的问题。好的,我能知道同样的原因和解决方法吗@Roy“但我好像在什么地方出错了。”-你能详细说明一下吗?我想下载TFS服务器中存在的所有文件。即使是添加的新文件也应下载。但我的代码并不是下载所有的文件。另外,对于GetItem()和CopyTo()方法,我还收到了错误“非静态字段方法需要对象引用”@罗伊斯坦克斯·乌拉尔。我已经把你的评论纳入了你的问题。好的,我能知道同样的原因和解决方法吗@Roy您能给我解释一下代码段或“服务器路径”和“本地路径”变量吗?您能给我解释一下代码段或“服务器路径”和“本地路径”变量吗?