使用EnvDTE删除Visual Studio项目中的文件夹的PowerShell脚本

时间:2018-01-29 02:08:58

标签: powershell visual-studio-2015 envdte

使用PowerShell我正在尝试使用EnvDTE从项目中删除特定的子文件夹。

我要删除的文件夹是:

  

MyWebProject \资产\ FolderToDelete

我开始使用的脚本是:

$DTE.Solution.Projects|Where-Object{$_.Name -eq 'MyWebProject'}|Select-Object -Expand ProjectItems

使用循环,然后我遍历ProjectItems以找到“FolderToDelete”(类型为ProjectItem)。然后我调用ProjectItem.Remove并将其从磁盘中删除:

$folderToDelete.Remove()
$folderToDeletePath = $folderToDelete.Remove.Properties.Item("FullPath").Value
Remove-Item -path $folderToDeletePath -recurse
$project.Save()

在Visual Studio解决方案资源管理器中,我打开了“显示所有文件”,我可以看到“FolderToDelete”已从项目中删除,但解决方案资源管理器仍将其显示为磁盘上的,但它实际上已经显示已被删除(如果我点击解决方案资源管理器中的“刷新”,它就会消失。)。

enter image description here

这会给我带来一些问题,因为Visual Studio似乎仍然认为它在磁盘上。

使用EnvDTE,如何让Visual Studio刷新并确认删除?

1 个答案:

答案 0 :(得分:1)

您说您没有PowerShell经验,因此,至少您需要快速使用PowerShell免费在线课程以确保您了解您能做什么和不能做什么以及什么做不起作用将是谨慎的。假设/猜测,只会导致你严重的头发拉动和不必要的压力/糟糕的经历。

  

Microsoft PowerShell入门

     

有兴趣学习PowerShell吗?这个Microsoft PowerShell课程是   旨在教授繁忙的IT专业人员,管理员和帮助台   有关如何使用PowerShell改善管理的人员   功能,自动执行冗余任务以及管理环境   规模。通过这个PowerShell教程,您将学习如何使用PowerShell   工作以及如何让PowerShell为专家Jeffrey工作   Snover,

     

课程大纲

     

PowerShell入门不要害怕外壳帮助系统&   连接为管理员扩展Shell对象   管道:更深入的壳牌动力 - 自动化,远程处理,   脚本&工具制作

     

https://mva.microsoft.com/en-US/training-courses/getting-started-with-microsoft-powershell-8276?l=r54IrOWy_2304984382

或使用Youtube

https://www.youtube.com/results?search_query=beginning+powershell

您没有按照您发布的内容的方式遍历文件系统。

正常文件系统遍历是通过......

# List the full path of the current directory and all child folders 
(Get-ChildItem -Path 'D:\MyProject' -Directory -Recurse).FullName

# Only get a specific folder
(Get-ChildItem -Path 'D:\MyProject' -Directory -Recurse -Filter 'Assets').FullName

...然后使用Remove-Item cmdlet或直接导航完整的UNC并使用Remove-Item cmdlet。

# Get parameters, example, full and Online help for a cmdlet or function

(Get-Command -Name Remove-Item).Parameters
Get-help -Name Remove-Item -Examples
Get-help -Name Remove-Item -Full
Get-help -Name Remove-Item -Online

我知道你正在使用Visual Studio,但是,根据MS Docs,ProjectItem.Remove方法.. https://docs.microsoft.com/en-us/dotnet/api/envdte.projectitem.remove?view=visualstudiosdk-2017

文档,特别说明了它的用途和方式。

  

对于ProjectItem对象,从项目中删除项目项。   如果ProjectItem.ProjectItems不为null - 也就是说,如果有的话   子目录 - 然后删除删除其中的所有项目项   目录及其子目录。

这个没有递归方法/选项,所以你必须手动完成。

这里甚至包括:

  

使用PowerShell清理Visual Studio项目文件夹

     

多年来,我创建了许多代码示例和演示项目   使用Visual Studios。我将其中许多保存在一个文件夹中   包含几个子文件夹,用于组织基于的代码   正在使用的技术。在打开,构建和关闭Visual Studio时   项目创建了很多额外的文件和文件夹。

     

https://blogs.msdn.microsoft.com/rbrundritt/2014/09/18/cleaning-up-visual-studio-project-folders-using-powershell

如果您使用纯Visual Studio方式,这里有一个使用DTE与文件夹枚举对话的帖子,那么您可以根据需要对其进行任何操作。

  

如何在项目下获取文件夹?

     

我正在尝试获取其下的项目和文件夹列表。我能   使用以下方式获取项目和项目项目:

     

How to get folders under projects?