【问题标题】:PowerShell Script to delete a folder in a Visual Studio Project with EnvDTE使用 EnvDTE 删除 Visual Studio 项目中的文件夹的 PowerShell 脚本
【发布时间】:2018-01-29 02:08:57
【问题描述】:

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

我要删除的文件夹是:

MyWebProject\Assets\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”已从项目中删除,但解决方案资源管理器仍将其显示为在磁盘上,但实际上已已被删除(如果我在解决方案资源管理器中单击“刷新”,它就会消失)。

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

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

【问题讨论】:

    标签: powershell visual-studio-2015 envdte


    【解决方案1】:

    您说您没有 PowerShell 经验,因此,谨慎的做法是至少参加一个快速的 PowerShell 免费在线课程,以确保您了解哪些可以做,哪些不能做,哪些可以做,哪些不能做。假设/猜测,只会导致您严重拉扯头发和不必要的压力/糟糕的经历。

    Microsoft PowerShell 入门

    有兴趣学习 PowerShell?此 Microsoft PowerShell 课程是 旨在教授忙碌的 IT 专业人员、管理员和服务台 人员关于如何使用 PowerShell 改进管理 能力,自动化冗余任务,并管理环境 规模。通过本 PowerShell 教程,您将了解 PowerShell 如何 杰弗里专家的作品以及如何使 PowerShell 为您工作 斯诺弗,

    课程大纲

    PowerShell 入门 不要害怕 Shell 帮助系统 & 为管理员扩展 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 — 也就是说,如果有 子目录 - 然后 Remove 删除该目录中的所有项目项 目录及其子目录。

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

    这里甚至包括:

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

    多年来,我创建了很多代码示例和演示项目 使用 Visual Studio。我将其中许多保存在一个文件夹中 包含几个子文件夹,用于根据 正在使用的技术。打开、构建和关闭 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?

    【讨论】:

    • 感谢您的详细回复。我已修改以发布更多关于 EnvDTE API 而不是 PowerShell 的信息。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多