我需要以编程方式将目录复制到我的项目中。我在我的项目中使用了以下代码:
ProjectItems.AddFromDirectory(_projectPath + "\\Folder");
但它不会复制整个目录。它只是将根文件夹添加到项目中。我独自面对 VS2015。
有什么解决办法吗?
这可能不是最优雅的解决方案。但它正在按要求使用 AddFromDirectory。我使用 Visual Studio 2015 Professional 对此进行了测试。
public static void RefreshItemsInProject(Project project, string projectPath)
{
foreach(string subDirectoryPath in Directory.EnumerateDirectories(projectPath))
AddItemsToProjectFromDirectory(project.ProjectItems, subDirectoryPath));
}
private static readonly HashSet<string> _excluded = new HashSet<string>() { "bin", "obj" };
public static void AddItemsToProjectFromDirectory(ProjectItems projectItems, string directoryPath)
{
//very weird GetDirectoryName returns the FULL PATH!!!!
//When using GetFileName on a Directory it actually returns the FolderName WITHOUT the PATH.
var directoryName = Path.GetFileName(directoryPath);
if(_excluded.Contains(directoryName.ToLower()))//folder to exclude like bin and obj.
return;//return right away if the folder has been excluded.
var subFolder = projectItems.AddFromDirectory(directoryPath);
foreach(string subDirectoryPath in Directory.EnumerateDirectories(directoryPath))
AddItemsToProjectFromDirectory(subFolder.ProjectItems, subDirectoryPath);
}
要像这样调用此代码:
RefreshItemsInProject(myProject, projectPath);
myProject 是 EnvDTE.Project 类型
每当有变化时,您都可以在项目上调用它;例如添加了一个新文件;它将刷新项目的内容。
请注意,它支持“排除的”目录列表,以避免在您的项目中包含 bin 和 obj 等内容。
希望对大家有所帮助。
更新:我意识到这只适用于二级目录。像这样:
MyDir--->MySecondDir--->MyItems 这有效! 二级项目。
MyDir--->MyItems 这不起作用! 第一级的项目。
由于某种原因,它无法在一级目录中添加项目。似乎是 Microsoft 实现中的错误。如果有人可以阐明这个问题;我真的很感激。
我是一名优秀的程序员,十分优秀!