Во время установки nuget я даю пользователю команду, которую он может запустить. Эта команда в основном сканирует некоторые файлы и создает несколько шаблонов кода, а затем вставляет их в текущий проект. Это прекрасно работает, за исключением того факта, что обозреватель решений не обновляет свое древовидное представление новыми файлами. Я знаю, что это работает, потому что я могу выгрузить и перезагрузить файл проекта, и файлы уже есть.
Если это поможет, вот код, который я использую для добавления файлов в проект — вторая функция — это то, что на самом деле вызывает пользователь.
function add-to-project ($itemType, $project)
{
process
{
$bogus = $project.Xml.AddItem($itemType, $_)
}
}
# Parse a file
function Write-TTree-MetaData ($Path = $(throw "-Path must be supplied"))
{
$p = Get-Project
Write-Host "Inserting the results of the parsing into project" $p.Name
$ms = Get-MSBuildProject
$destDir = ([System.IO.FileInfo] $p.FullName).Directory
# Run the parse now
CmdTFileParser -d $destDir.FullName $Path
# Now, attempt to insert them all into the project
$allFiles = Get-ChildItem -Path $destDir.FullName
$allFiles | ? {$_.Extension -eq ".ntup"} | add-to-project "TTreeGroupSpec" $ms
$allFiles | ? {$_.Extension -eq ".ntupom"} | add-to-project "ROOTFileDataModel" $ms
# Make sure everything is saved!
$ms.Save()
$p.Save()
}
Этот код вызывает всплывающее забавное диалоговое окно - "Проект был изменен на диске - пожалуйста, перезагрузите" - и, надеюсь, пользователь перезагрузится, и тогда файлы отобразятся правильно... Но было бы неплохо этого избежать и просто Пусть сценарий вызывает все, что необходимо. Возможно, мне нужно выяснить, как выгрузить и перезагрузить проект?
Что мне нужно сделать, чтобы принудительно обновить обозреватель решений? Большое спасибо!