我需要以编程方式将目录复制到我的项目中。我在项目中使用了以下代码:
ProjectItems.AddFromDirectory(_projectPath + "\\Folder");
但是它不会复制整个目录。它只是将根文件夹添加到项目中。仅凭VS2015即可面对这一问题。
有什么解决办法吗?
最佳答案
这可能不是最优雅的解决方案。
但是它正在按要求使用AddFromDirectory。
我使用Visual Studio 2015专业版对此进行了测试。
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之类的内容。
我希望这可以帮助别人。
更新:我意识到这仅适用于SECOND LEVEL目录。
像这样:
MyDir ---> MySecondDir ---> MyItems这样工作!第二级项目。
MyDir ---> MyItems无效!一级物品。
由于某种原因,它无法将项目添加到第一级目录中。
似乎是Microsoft实施中的错误。如果有人可以阐明这个问题;我会很感激的。
关于c# - ProjectItems.AddFromDirectory不适用于VS2015,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31873609/