我想通過NuGet包將解決方案文件夾和解決方案項(不是項目)添加到解決方案文件。我想這可以通過Powershell完成。我查看了NuGet,Powershell和EnvDTE的文檔,但無法弄清楚:在NuGet包中添加解決方案級項目
- 我會使用哪些命令/方法?
- 我會在Init.ps1,Install.ps1或其他地方執行此操作的標準腳本?
我想通過NuGet包將解決方案文件夾和解決方案項(不是項目)添加到解決方案文件。我想這可以通過Powershell完成。我查看了NuGet,Powershell和EnvDTE的文檔,但無法弄清楚:在NuGet包中添加解決方案級項目
這是一個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接口Solution2和SolutionFolder。它還使用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)
還缺少的是檢查解決方案文件夾和文件夾項目是否已經存在。我將把它作爲一個練習,讓你去做。
謝謝,這正是我一直在尋找的。 – brainiac10
有沒有什麼辦法可以調試init腳本? – smnbss
您可以在NuGet Package Manager控制檯中嘗試set-psdebug。我只是嘗試在控制檯窗口中針對活動項目運行命令。另一種選擇是將輸出寫入控制檯窗口。 –