C# 使用Powershell/C自动签入TFS#

C# 使用Powershell/C自动签入TFS#,c#,powershell,tfs,C#,Powershell,Tfs,我正在尝试编写一个Powershell脚本,该脚本在成功构建时运行,并从azure下载一些工件,然后签入TFS 我们是否有一个示例c#代码或powershell脚本来完成此任务 提前感谢您可以通过编程(C#)将一些文件从本地文件夹签入到TFS。您需要创建一个工作区,等待更改,检查这些更改,解决冲突(如果有)。相关代码段: using System; using System.Collections.Generic; using System.Diagnostics; using System.I

我正在尝试编写一个Powershell脚本,该脚本在成功构建时运行,并从azure下载一些工件,然后签入TFS

我们是否有一个示例c#代码或powershell脚本来完成此任务


提前感谢

您可以通过编程(C#)将一些文件从本地文件夹签入到TFS。您需要创建一个工作区等待更改检查这些更改解决冲突(如果有)。相关代码段:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;

namespace BasicSccExample
{
    class Example
    {
        static void Main(string[] args)
        {
            // Verify that we have the arguments we require.
            if (args.Length < 2)
            {
                String appName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
                Console.Error.WriteLine("Usage: {0} collectionURL teamProjectPath", appName);
                Console.Error.WriteLine("Example: {0} http://tfsserver:8080/tfs/DefaultCollection $/MyProject", appName);
                Environment.Exit(1);
            }

            // Get a reference to our Team Foundation Server.
            TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(args[0]));

            // Get a reference to Version Control.
            VersionControlServer versionControl = tpc.GetService<VersionControlServer>();

            // Listen for the Source Control events.
            versionControl.NonFatalError += Example.OnNonFatalError;
            versionControl.Getting += Example.OnGetting;
            versionControl.BeforeCheckinPendingChange += Example.OnBeforeCheckinPendingChange;
            versionControl.NewPendingChange += Example.OnNewPendingChange;

            // Create a workspace.
            Workspace workspace = versionControl.CreateWorkspace("BasicSccExample", versionControl.AuthorizedUser);

            String topDir = null;

            try
            {
                String localDir = @"c:\temp\BasicSccExample";
                Console.WriteLine("\r\n--- Create a mapping: {0} -> {1}", args[1], localDir);
                workspace.Map(args[1], localDir);

                Console.WriteLine("\r\n--- Get the files from the repository.\r\n");
                workspace.Get();

                Console.WriteLine("\r\n--- Create a file.");
                topDir = Path.Combine(workspace.Folders[0].LocalItem, "sub");
                Directory.CreateDirectory(topDir);
                String fileName = Path.Combine(topDir, "basic.cs");
                using (StreamWriter sw = new StreamWriter(fileName))
                {
                    sw.WriteLine("revision 1 of basic.cs");
                }

                Console.WriteLine("\r\n--- Now add everything.\r\n");
                workspace.PendAdd(topDir, true);

                Console.WriteLine("\r\n--- Show our pending changes.\r\n");
                PendingChange[] pendingChanges = workspace.GetPendingChanges();
                Console.WriteLine("  Your current pending changes:");
                foreach (PendingChange pendingChange in pendingChanges)
                {
                    Console.WriteLine("    path: " + pendingChange.LocalItem +
                                      ", change: " + PendingChange.GetLocalizedStringForChangeType(pendingChange.ChangeType));
                }

                Console.WriteLine("\r\n--- Checkin the items we added.\r\n");
                int changesetNumber = workspace.CheckIn(pendingChanges, "Sample changes");
                Console.WriteLine("  Checked in changeset " + changesetNumber);

                Console.WriteLine("\r\n--- Checkout and modify the file.\r\n");
                workspace.PendEdit(fileName);
                using (StreamWriter sw = new StreamWriter(fileName))
                {
                    sw.WriteLine("revision 2 of basic.cs");
                }

                Console.WriteLine("\r\n--- Get the pending change and check in the new revision.\r\n");
                pendingChanges = workspace.GetPendingChanges();
                changesetNumber = workspace.CheckIn(pendingChanges, "Modified basic.cs");
                Console.WriteLine("  Checked in changeset " + changesetNumber);
            }
            finally
            {
                if (topDir != null)
                {
                    Console.WriteLine("\r\n--- Delete all of the items under the test project.\r\n");
                    workspace.PendDelete(topDir, RecursionType.Full);
                    PendingChange[] pendingChanges = workspace.GetPendingChanges();
                    if (pendingChanges.Length > 0)
                    {
                        workspace.CheckIn(pendingChanges, "Clean up!");
                    }

                    Console.WriteLine("\r\n--- Delete the workspace.");
                    workspace.Delete();
                }
            }
        }

        internal static void OnNonFatalError(Object sender, ExceptionEventArgs e)
        {
            if (e.Exception != null)
            {
                Console.Error.WriteLine("  Non-fatal exception: " + e.Exception.Message);
            }
            else
            {
                Console.Error.WriteLine("  Non-fatal failure: " + e.Failure.Message);
            }
        }

        internal static void OnGetting(Object sender, GettingEventArgs e)
        {
            Console.WriteLine("  Getting: " + e.TargetLocalItem + ", status: " + e.Status);
        }

        internal static void OnBeforeCheckinPendingChange(Object sender, ProcessingChangeEventArgs e)
        {
            Console.WriteLine("  Checking in " + e.PendingChange.LocalItem);
        }

        internal static void OnNewPendingChange(Object sender, PendingChangeEventArgs e)
        {
            Console.WriteLine("  Pending " + PendingChange.GetLocalizedStringForChangeType(e.PendingChange.ChangeType) +
                              " on " + e.PendingChange.LocalItem);
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统诊断;
使用System.IO;
使用系统文本;
使用Microsoft.TeamFoundation.Client;
使用Microsoft.TeamFoundation.VersionControl.Client;
命名空间基本示例
{
课例
{
静态void Main(字符串[]参数)
{
//验证我们是否具有所需的参数。
如果(参数长度<2)
{
字符串appName=Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);
Console.Error.WriteLine(“用法:{0}collectionURL teamProjectPath”,appName);
Console.Error.WriteLine(“示例:{0}”http://tfsserver:8080/tfs/DefaultCollection $/MyProject”,appName);
环境。出口(1);
}
/获取对我们的Team Foundation服务器的引用。
TfsTeamProjectCollection tpc=新的TfsTeamProjectCollection(新Uri(args[0]);
//获取对版本控制的引用。
VersionControlServer versionControl=tpc.GetService();
//侦听源代码管理事件。
versionControl.NonCatalError+=示例.OnNonCatalError;
versionControl.Getting+=Example.OnGetting;
versionControl.BeforeCheckinPendingChange+=示例.OnBeforeCheckinPendingChange;
versionControl.NewPendingChange+=示例.OnNewPendingChange;
//创建一个工作区。
Workspace Workspace=versionControl.CreateWorkspace(“basicscecexample”,versionControl.AuthorizedUser);
字符串topDir=null;
尝试
{
字符串localDir=@“c:\temp\basicscecexample”;
WriteLine(“\r\n--创建一个映射:{0}->{1}”,args[1],localDir);
Map(args[1],localDir);
Console.WriteLine(“\r\n--从存储库获取文件。\r\n”);
Get();
Console.WriteLine(“\r\n---创建文件”);
topDir=Path.Combine(workspace.Folders[0].LocalItem,“sub”);
CreateDirectory(topDir);
字符串文件名=Path.Combine(topDir,“basic.cs”);
使用(StreamWriter sw=新StreamWriter(文件名))
{
sw.WriteLine(“basic.cs第1版”);
}
Console.WriteLine(“\r\n--现在添加所有内容。\r\n”);
PendAdd(topDir,true);
Console.WriteLine(“\r\n--显示挂起的更改。\r\n”);
pendingChanges[]pendingChanges=workspace.GetPendingChanges();
WriteLine(“当前挂起的更改:”);
foreach(PendingChange pendingChanges中的pendingChanges)
{
Console.WriteLine(“路径:”+pendingChange.LocaleItem+
,更改:“+PendingChange.GetLocalizedStringForChangeType(PendingChange.ChangeType));
}
Console.WriteLine(“\r\n--签入我们添加的项目。\r\n”);
int changesetNumber=workspace.CheckIn(pendingChanges,“示例更改”);
Console.WriteLine(“签入变更集”+变更集编号);
Console.WriteLine(“\r\n--签出并修改文件。\r\n”);
PendEdit(文件名);
使用(StreamWriter sw=新StreamWriter(文件名))
{
sw.WriteLine(“basic.cs第2版”);
}
Console.WriteLine(“\r\n---获取挂起的更改并签入新版本。\r\n”);
pendingChanges=workspace.GetPendingChanges();
changesetNumber=workspace.CheckIn(pendingChanges,“Modified basic.cs”);
Console.WriteLine(“签入变更集”+变更集编号);
}
最后
{
if(topDir!=null)
{
Console.WriteLine(“\r\n--删除测试项目下的所有项。\r\n”);
PendDelete(topDir,RecursionType.Full);
pendingChanges[]pendingChanges=workspace.GetPendingChanges();
如果(pendingChanges.Length>0)
{
签入(挂起更改,“清理!”);
}
Console.WriteLine(“\r\n---删除工作区”);
workspace.Delete();
}
}
}
内部静态void onnoncatalError(对象发送方,例外为ventargs e)
{
如果(例如异常!=null)
{
Console.Error.WriteLine(“非致命异常:+e.exception.Message”);
}
其他的
{
Console.Error.WriteLine(“非致命故障:+e.failure.Message”);
}
}
内部静态void OnGetting(对象发送方,GettingEventArgs e)
{
Console.WriteLine(“获取:+e.TargetLocalItem+”,状态:+e.status);
}
CheckInPendingChange之前的内部静态无效(对象发送方,ProcessingChangeEventArgs e)
{
Console.WriteLine(“签入”+e.PendingChange.LocalItem);
}
内部静态void OnNewPendingChange(对象发送器,挂起