C# 使用Powershell/C自动签入TFS#
我正在尝试编写一个Powershell脚本,该脚本在成功构建时运行,并从azure下载一些工件,然后签入TFS 我们是否有一个示例c#代码或powershell脚本来完成此任务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
提前感谢您可以通过编程(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(对象发送器,挂起