使用NuGet/Powershell从项目中删除文件夹和文件
问题描述:
我想在我的NuGet软件包安装过程中从我的项目中删除App_Start文件夹。对于这里的NuGet文档:使用NuGet/Powershell从项目中删除文件夹和文件
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认为这些项目是项目的一部分。
我需要的是一种以编程方式从项目中删除对这些项目的引用的方法。有任何想法吗?
答
好吧,我绝对相信有比这更好的方式,但我从来没有用过的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} | %{...}' - 你不必嵌套'foreach'。 – 2013-03-17 03:03:10
是的,当我写这篇文章时,我对PoSh很新颖。它可以工作,但它可能会变得更可读= D – 2013-03-18 12:31:27
不知道我可以通过$ DTE.Solution.xyz命令直接在PM控制台中浏览解决方案。谢谢,这加快了我的工作! – 2013-05-17 14:00:46