如何使用Microsoft.Build.Evaluation.Project.RemoveItem(How to use Microsoft.Build.Evaluation.Project.RemoveItem)

我已成功使用以下代码以编程方式将文件添加到我的项目中:

var project = new Microsoft.Build.Evaluation.Project(projPath); project.AddItem("Compile", filePath);

但是,以编程方式删除文件给我很难。

签名:

public bool RemoveItem( ProjectItem item )

我如何实例化一个ProjectItem ? 我找不到任何例子。

参考: https : //msdn.microsoft.com/en-us/library/microsoft.build.evaluation.project.removeitem.aspx

I've successfuly added files programatically to my project using the following code:

var project = new Microsoft.Build.Evaluation.Project(projPath); project.AddItem("Compile", filePath);

However, removing a file programatically is giving me a hard time.

Signature:

public bool RemoveItem( ProjectItem item )

How can I instantiate a ProjectItem? I couldn't find any examples.

Reference: https://msdn.microsoft.com/en-us/library/microsoft.build.evaluation.project.removeitem.aspx

最满意答案

这是我最终写作的课程。 没有简单的解决方案。

public static class SourceControlHelper { public static void CheckoutFile(string filePath) { TFSAction((workspace) => workspace.PendEdit(filePath), filePath); } public static void AddFile(this Project project, string filePath) { CheckoutFile(project.FullPath); var projectItem = project.GetProjectItem(filePath); if (projectItem != null) { return; } var includePath = filePath.Substring(project.DirectoryPath.Length + 1); project.AddItem(CompileType, includePath); project.Save(); TFSAction(workspace => workspace.PendAdd(filePath), filePath); } public static void DeleteFile(this Project project, string filePath) { CheckoutFile(project.FullPath); var projectItem = project.GetProjectItem(filePath); if (projectItem == null) { return; } project.RemoveItem(projectItem); project.Save(); TFSAction(workspace => workspace.PendDelete(filePath), filePath); } private static ProjectItem GetProjectItem(this Project project, string filePath) { var includePath = filePath.Substring(project.DirectoryPath.Length + 1); var projectItem = project.GetItems(CompileType).FirstOrDefault(item => item.EvaluatedInclude.Equals(includePath)); return projectItem; } private static void TFSAction(Action<Workspace> action, string filePath) { var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filePath); if (workspaceInfo == null) { Console.WriteLine("Failed to initialize workspace info"); return; } using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri)) { var workspace = workspaceInfo.GetWorkspace(server); action(workspace); } } private static string CompileType { get { return CopyTool.Extension.Equals("ts") ? "TypeScriptCompile" : "Compile"; } } }

This is the class I ended up writing. No simple solution for remove.

public static class SourceControlHelper { public static void CheckoutFile(string filePath) { TFSAction((workspace) => workspace.PendEdit(filePath), filePath); } public static void AddFile(this Project project, string filePath) { CheckoutFile(project.FullPath); var projectItem = project.GetProjectItem(filePath); if (projectItem != null) { return; } var includePath = filePath.Substring(project.DirectoryPath.Length + 1); project.AddItem(CompileType, includePath); project.Save(); TFSAction(workspace => workspace.PendAdd(filePath), filePath); } public static void DeleteFile(this Project project, string filePath) { CheckoutFile(project.FullPath); var projectItem = project.GetProjectItem(filePath); if (projectItem == null) { return; } project.RemoveItem(projectItem); project.Save(); TFSAction(workspace => workspace.PendDelete(filePath), filePath); } private static ProjectItem GetProjectItem(this Project project, string filePath) { var includePath = filePath.Substring(project.DirectoryPath.Length + 1); var projectItem = project.GetItems(CompileType).FirstOrDefault(item => item.EvaluatedInclude.Equals(includePath)); return projectItem; } private static void TFSAction(Action<Workspace> action, string filePath) { var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(filePath); if (workspaceInfo == null) { Console.WriteLine("Failed to initialize workspace info"); return; } using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri)) { var workspace = workspaceInfo.GetWorkspace(server); action(workspace); } } private static string CompileType { get { return CopyTool.Extension.Equals("ts") ? "TypeScriptCompile" : "Compile"; } } }

更多推荐

project,ProjectItem,programatically,编程,电脑培训,计算机培训,IT培训"/> <meta n