【发布时间】:2009-04-01 20:01:38
【问题描述】:
我在 Visual Studio 2008 中有一个大型项目。它积累了几年的尝试经验,并且经常从项目中排除(而不是删除)文件。我需要一种永久删除任何排除文件的方法。有数千个文件和数百个文件夹。在解决方案资源管理器中手动执行此操作会花费太多时间。
我可以构建一个项目文件解析器并与文件系统进行比较,但我希望有一个捷径。
谢谢
【问题讨论】:
我在 Visual Studio 2008 中有一个大型项目。它积累了几年的尝试经验,并且经常从项目中排除(而不是删除)文件。我需要一种永久删除任何排除文件的方法。有数千个文件和数百个文件夹。在解决方案资源管理器中手动执行此操作会花费太多时间。
我可以构建一个项目文件解析器并与文件系统进行比较,但我希望有一个捷径。
谢谢
【问题讨论】:
排除的文件是否与其他文件一起受源代码控制?如果没有,只需确保所有内容都已签入,获取到新的临时位置,将旧目录移开作为备份,然后将临时文件夹移动到旧目录所在的位置。
如果将实验检查到源代码控制中,则稍微困难一些 - 您可能需要使用项目文件解析器。不过,这可能并不难。
编辑:好的,如果全部在 SVN 中,我建议你编写一个 非常 粗略的项目解析器。给它一个 XPath 表达式(或类似的东西)列表以选择为“可能的路径”。选择项目文件中的所有内容,并将每个选择的文件复制到新位置(包括子目录等)。同时复制项目文件和解决方案文件。然后尝试构建 - 如果它失败了,你错过了一些东西:重复。
继续进行,直到构建完成,然后对其进行测试。只要一切都好,你就可以把其他一切都吹走:)
编辑:这是我的意思的那种事情的开始:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
public class ProjectParser
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load(args[0]);
XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
DumpMatches(doc.Descendants(ns + "Compile")
.Select(x => x.Attribute("Include").Value));
DumpMatches(doc.Descendants(ns + "AssemblyOriginatorKeyFile")
.Select(x => x.Value));
}
static void DumpMatches(IEnumerable<string> values)
{
foreach (string x in values)
{
Console.WriteLine(x);
}
}
}
(我最初尝试使用 XPath,但命名空间的东西让它很痛苦。)
【讨论】:
打开命令提示符并尝试DEL/S *.exclude。我认为您最好为 Visual Studio 编写加载项。
【讨论】: