如何通过nuget powershell脚本重新加载visual studio项目

时间:2012-09-06 03:30:04

标签: visual-studio-2010 powershell nuget envdte

在解决方案资源管理器中,“DependentUpon”项目项目通常被禁用为其他项目的子项(例如web.config / web.Debug.config)。 我遇到的问题是在程序包安装时通过nuget / powershell动态添加项目时,解决方案资源管理器不会重新加载项目,因此项目不会显示为依赖项。手动关闭并重新打开解决方案或卸载/重新加载项目可解决问题。 我想将Project Reload自动化作为install.ps1 powershell脚本的一部分,但是当我这样做时,我得到'Project Unloaded'错误并且nuget回滚安装。我想这是因为我知道如何获取Reload上下文菜单的唯一方法是首先卸载项目。

我正在寻找在此调用后调用的对象。我想如果我能直接执行,我就不必先卸载项目了。

$dte.ExecuteCommand("Project.ReloadProject")

以下是在解决方案资源管理器中卸载/重新加载项目的完整代码

# Reload a project thru dte/SolutionExplorer Window 
# using Unload and Reload Context Menus.

$project = Get-Project
$shortpath = $dte.Solution.Properties.Item("Name").Value + "\" + $project.Name

#following GUID = Constants.vsWindowKindSolutionExplorer
#magic 1 = vsUISelectionType.vsUISelectionTypeSelect
$dte.Windows.Item("{3AE79031-E1BC-11D0-8F78-00A0C9110057}").Activate()
$dte.ActiveWindow.Object.GetItem($shortpath).Select(1)
$dte.ExecuteCommand("Project.UnloadProject")
$dte.ExecuteCommand("Project.ReloadProject")

2 个答案:

答案 0 :(得分:3)

通过触摸'我已经解决了这个问题。项目文件,因此触发Visual Studio在包管理器关闭后提示用户重新加载修改后的项目。所以我的Install.ps1文件如下所示:

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

# if there isn't a project file, there is nothing to do
if (!$project) { return }

# Do some stuff here

$project.Save()

# Touch the file to force a project reload
$(get-item $project.FullName).lastwritetime=get-date

答案 1 :(得分:0)

这里回答类似的问题: Is there a setting in VS 2010 that will allow it to recover open files after a project file changes? 但是,它并不表示可以在没有先调用卸载的情况下调用重新加载,并且它不提供直接调用直接调用dte.executecommand的机制。