在NuGet包中添加解决方案级别的项目

bra*_*c10 32 .net powershell envdte nuget

我想通过NuGet包将解决方案文件夹和解决方案项(而不是项目)添加到解决方案文件中.我想这可以通过Powershell完成.我查看了NuGet,Powershell和EnvDTE的文档,但无法弄清楚:

  1. 我会使用哪些命令/方法?
  2. 我会在哪个标准脚本中执行此操作,Init.ps1,Install.ps1或其他位置?

Mat*_*ard 52

这是一个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)
Run Code Online (Sandbox Code Playgroud)

这里使用的两个主要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")
Run Code Online (Sandbox Code Playgroud)

此PowerShell脚本缺少的是文件顶部的标准参数声明.

param($installPath, $toolsPath, $package, $project)
Run Code Online (Sandbox Code Playgroud)

还缺少的是检查解决方案文件夹和文件夹项是否已存在.我将把它作为练习让你去做.