【问题标题】:Remove folder & files from project using NuGet/Powershell使用 NuGet/Powershell 从项目中删除文件夹和文件
【发布时间】:2013-03-15 14:28:54
【问题描述】:

我试图在安装 NuGet 包期间从我的项目中删除 App_Start 文件夹。 NuGet 的文档在这里:

http://nuget.codeplex.com/wikipage?title=Creating%20a%20Package

说:

$project.Object 相当于http://msdn.microsoft.com/en-us/library/ms170626.aspx

我无法找到对我有很大帮助的该界面的太多信息。

我有以下 Powershell 脚本,它成功地删除文件夹和文件:

param($installPath, $toolsPath, $package, $project)

$DirInfo = New-Object System.IO.DirectoryInfo($installPath) 
$appDir = New-Object System.IO.DirectoryInfo($DirInfo.Parent.Parent.FullName)
$fullPath = [IO.Path]::Combine($appDir.FullName, $appDir.Name, "App_start")
Remove-Item $fullPath -recurse

(我知道这里的路径不能保证,但是这个包仅供内部使用)

但是项目仍然有对项目的引用,因此项目出现黄色警告,因为 Visual Studio 认为项目是项目的一部分。

我需要的是一种以编程方式从项目中删除对这些项目的引用的方法。有任何想法吗?

【问题讨论】:

    标签: powershell nuget nuget-package


    【解决方案1】:

    好的,我绝对确定有比这更好的方法,但直到今天我才使用过 NuGet 或 Powershell...:/

    我刚刚在我的包管理器控制台中运行了这个:

    $DTE.Solution.Projects | ForEach { $_.ProjectItems | ForEach { if ($_.Name -eq "Controllers") { $_.Remove() } } }
    

    它遍历所有项目项,寻找名为“控制器”的顶级项,然后将其从项目中删除。很确定您可以将其更改为“App_Code”。

    编辑:我的朋友(比我更了解 Powershell)发送了这个:

    $DTE.Solution.Projects|Select-Object -Expand ProjectItems|Where-Object{$_.Name -eq 'Controllers'}|ForEach-Object{$_.Remove()}
    

    【讨论】:

    • 在PowerShell中,当你有... | foreach { $_.Foo | % { ... } }时,你通常可以写... | foreach { $_.Foo } | % { ... }——你不必嵌套foreachs。
    • 是的,当我写这篇文章时,我对 PoSh 还很陌生。它可以工作,但它可能会变得更具可读性 =D
    • 不知道我可以通过 $DTE.Solution.xyz 命令直接在 PM 控制台中浏览解决方案。谢谢,这加快了我的工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2017-10-30
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多