Adding solution-level items in a NuGet package

后端 未结 1 472
有刺的猬
有刺的猬 2020-12-02 13:13

I want to add solution folders and solution items (not projects) to a solution file via a NuGet package. I imagine this would be accomplished through Powershell. I\'ve loo

相关标签:
1条回答
  • 2020-12-02 13:56

    Here is a PowerShell script that will create a solution folder called Parent and another solution folder called Child inside that one. It also adds a project file (MyProject.csproj) inside the Child solution folder.

    # 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)
    

    The two main Visual Studio interfaces being used here are Solution2 and SolutionFolder. It also uses the Get-Interface function which is provided by NuGet.

    For a solution-only package you should place your script in init.ps1 because install.ps1 is only invoked for project-based packages. Init.ps1 runs once for a solution when the package is first installed and every time the solution is re-opened in Visual Studio.

    To add arbitrary files (non-project files) to a solution folder you will need to do something similar to the following:

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

    What is missing from this PowerShell script is the standard parameter declarations at the top of file.

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

    What is also missing is checking whether the solution folder and folder item already exist. I shall leave that as an exercise for you to do.

    0 讨论(0)
提交回复
热议问题