如何在没有物理文件路径的情况下将文件附加到TFS中的工作项?

我有一个类型为Microsoft.Office.Interop.Outlook.Attachment的对象,我想将它附加到TFS工作项( Microsoft.TeamFoundation.WorkItemTracking.Client.Microsoft.TeamFoundation.WorkItemTracking.Client

不幸的是,我发现只有一种方法可以将附件添加到需要文件物理路径的Microsoft.TeamFoundation.WorkItemTracking.Client.Microsoft.TeamFoundation.WorkItemTracking.Client 。 但就我而言,我在内存中有一个文件(类型为Microsoft.Office.Interop.Outlook.Attachment )。

如何将我的文件附加到TFS工作项?

注意:此代码不是我的问题的答案:

 workItem.Attachments.Add(new Attachment("PATH OF MY ATTACHMENT", "COMMENT ABOUT ATTACHMENT")); 

因为我没有任何道路。 另外我不想将我的文件保存到硬盘中,因为这种方式性能非常糟糕。

您可以使用Microsoft.TeamFoundation.WorkItemTracking.Proxy.WorkItemServer对象来执行此操作(请参阅下面的代码)。 与使用常规TFS WIT对象模型相比,它需要更多的工作,但允许您将Stream对象用于附件而不是使用物理文件路径。

 using Microsoft.TeamFoundation.WorkItemTracking.Proxy; var tpc = new TfsTeamProjectCollection(new Uri("")); var store = tpc.GetService(); var teamProject = store.Projects[""]; var server = tpc.GetService(); FileAttachment attachment = new FileAttachment(); attachment.LocalFile = stream; /*this is the stream object with attachment contents*/ attachment.AreaNodeUri = teamProject.AreaRootNodes[0].Uri.ToString(); attachment.FileNameGUID = Guid.NewGuid(); /*just random guid*/ attachment.ProjectUri = teamProject.Uri.ToString(); server.UploadFile(attachment); /*upload the file to TFS*/ /*Time to attach the TFS file to the work item. We need to use Update() method directly*/ const string c_UpdatePackage = @"     {6}           "; XmlDocument updatePackage = new XmlDocument(); updatePackage.LoadXml(string.Format(c_UpdatePackage, 1 /*work item ID*/, 2 /*work item latest revision*/, "", attachment.FileNameGUID, DateTime.Now.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'"), fileContent.Length, "", "")); XmlElement outputPackage; /*this can be ignored*/ string dbStamp; /*this can be ignored*/ IMetadataRowSets metadata; /*this can be ignored*/ server.Update(Guid.NewGuid().ToString(), updatePackage.DocumentElement, out outputPackage, null, out dbStamp, out metadata);