在 nuget install 期间,我给用户一个他们可以运行的命令。该命令基本上是扫描一些文件并创建一些代码模板,然后将它们插入到当前项目中。这工作得很好——除了解决方案资源管理器没有用新文件更新它的树视图。我知道这行得通,因为我可以卸载并重新加载项目文件并且文件在那里。
如果有帮助,这里是我用来将文件添加到项目中的代码——第二个函数是用户实际调用的函数。
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()
}
此代码会弹出一个有趣的对话框 - “项目已在磁盘上修改 - 请重新加载” - 希望用户重新加载,然后文件正确显示......但最好避免这种情况,只是让脚本导致需要发生的任何事情。也许我必须弄清楚如何卸载和重新加载项目?
我需要做什么来强制解决方案资源管理器更新?非常感谢!