2011-04-26 173 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

相關問題