下面是一个 PowerShell 脚本,它将创建一个名为 Parent 的解决方案文件夹,并在其中创建另一个名为 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 界面是解决方案2 http://msdn.microsoft.com/en-us/library/eayseyzh.aspx and 解决方案文件夹 http://msdn.microsoft.com/en-us/library/envdte80.solutionfolder%28v=VS.100%29.aspx。它还使用 NuGet 提供的 Get-Interface 函数。
对于仅解决方案的包,您应该将脚本放在 init.ps1 中,因为安装.ps1 http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Automatically_Running_PowerShell_Scripts_During_Package_Installation_and_Removal仅针对基于项目的包调用。首次安装包时以及每次在 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)
还缺少检查解决方案文件夹和文件夹项是否已存在。我将把它作为练习留给你来做。