2011-04-26 140 views
14

我想在我的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认为这些项目是项目的一部分。

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

回答

15

好吧,我绝对相信有比这更好的方式,但我从来没有用过的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()} 
+0

在PowerShell中,当你有'... | foreach {$ _。Foo | %{...}}'你通常可以写'... | foreach {$ _。Foo} | %{...}' - 你不必嵌套'foreach'。 – 2013-03-17 03:03:10

+0

是的,当我写这篇文章时,我对PoSh很新颖。它可以工作,但它可能会变得更可读= D – 2013-03-18 12:31:27

+1

不知道我可以通过$ DTE.Solution.xyz命令直接在PM控制台中浏览解决方案。谢谢,这加快了我的工作! – 2013-05-17 14:00:46