2011-06-23 119 views
31

我想通過NuGet包將解決方案文件夾和解決方案項(不是項目)添加到解決方案文件。我想這可以通過Powershell完成。我查看了NuGet,Powershell和EnvDTE的文檔,但無法弄清楚:在NuGet包中添加解決方案級項目

  1. 我會使用哪些命令/方法?
  2. 我會在Init.ps1,Install.ps1或其他地方執行此操作的標準腳本?

回答

51

這是一個PowerShell腳本,它將創建一個名爲Parent的解決方案文件夾和另一個名爲Child的解決方案文件夾。它還在Child解決方案文件夾中添加項目文件(MyProject.csproj)。

# Get the open solution. 
$solution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 

# Create the parent solution folder. 
$parentProject = $solution.AddSolutionFolder("Parent") 

# Create a child solution folder. 
$parentSolutionFolder = Get-Interface $parentProject.Object ([EnvDTE80.SolutionFolder]) 
$childProject = $parentSolutionFolder.AddSolutionFolder("Child") 

# Add a file to the child solution folder. 
$childSolutionFolder = Get-Interface $childProject.Object ([EnvDTE80.SolutionFolder]) 
$fileName = "D:\projects\MyProject\MyProject.csproj" 
$projectFile = $childSolutionFolder.AddFromFile($fileName) 

這裏所使用的兩個主要的Visual Studio接口Solution2SolutionFolder。它還使用NuGet提供的Get-Interface功能。

對於僅用於解決方案的軟件包,應將腳本放置在init.ps1中,因爲install.ps1僅針對基於項目的軟件包進行調用。初次安裝軟件包時以及每次在Visual Studio中重新打開解決方案時,Init.ps1都會爲解決方案運行一次。

任意文件(非項目文件)添加到解決方案的文件夾,你需要做類似下面的東西:

$vsSolution = Get-Interface $dte.Solution ([EnvDTE80.Solution2]) 
$vsProject = $vsSolution.AddSolutionFolder("newFolder") 
$projectItems = Get-Interface $vsProject.ProjectItems ([EnvDTE.ProjectItems]) 
$projectItems.AddFromFile("pathToFileToAdd.txt") 

什麼是從這個PowerShell腳本缺少的是在標準參數聲明文件頂部。

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

還缺少的是檢查解決方案文件夾和文件夾項目是否已經存在。我將把它作爲一個練習,讓你去做。

+0

謝謝,這正是我一直在尋找的。 – brainiac10

+0

有沒有什麼辦法可以調試init腳本? – smnbss

+1

您可以在NuGet Package Manager控制檯中嘗試set-psdebug。我只是嘗試在控制檯窗口中針對活動項目運行命令。另一種選擇是將輸出寫入控制檯窗口。 –

相關問題