NuGetパッケージを介してソリューションフォルダーとソリューションアイテム(プロジェクトではない)をソリューションファイルに追加したい。これはPowershellを介して実現されると思います。NuGet、Powershell、およびEnvDTEのドキュメントを調べましたが、わかりません。
- どのコマンド/メソッドを使用しますか?
- Init.ps1、Install.ps1、または他の場所でこれを行う標準スクリプトはどれですか?
NuGetパッケージを介してソリューションフォルダーとソリューションアイテム(プロジェクトではない)をソリューションファイルに追加したい。これはPowershellを介して実現されると思います。NuGet、Powershell、およびEnvDTEのドキュメントを調べましたが、わかりません。
これは、Parentというソリューションフォルダーとその中にChildという別のソリューションフォルダーを作成するPowerShellスクリプトです。また、子ソリューションフォルダー内にプロジェクトファイル(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)
ここで使用されている2つの主要なVisualStudioインターフェイスは、Solution2とSolutionFolderです。また、NuGetが提供するGet-Interface関数も使用します。
ソリューションのみのパッケージの場合、 install.ps1はプロジェクトベースのパッケージに対してのみ呼び出されるため、スクリプトをinit.ps1に配置する必要があります。Init.ps1は、パッケージが最初にインストールされたとき、およびソリューションがVisual Studioで再度開かれるたびに、ソリューションに対して1回実行されます。
ソリューションフォルダに任意のファイル(プロジェクト以外のファイル)を追加するには、次のような操作を行う必要があります。
$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)
また、ソリューションフォルダーとフォルダーアイテムが既に存在するかどうかを確認することもできません。私はあなたがするための練習としてそれを残しておきます。