2012-09-06 52 views
1

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

我正在寻找在此调用后面被调用的对象。我想如果我可以直接执行,我不必首先卸载该项目。

$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") 
+0

您是否曾经找到更好的解决方案?我遇到了同样的问题,即在nuget安装或更新后项目文件的更改没有触发项目重新加载,而我只需要开发人员重新加载自己!我很惊讶这不是由VS自动处理,尤其是nuget包通过VS项目对象更新项目。 – Phil

+0

在这里,我在8分钟后张贴我的最终解决方案(facepalm!)我只是'接触'该项目文件重新加载项目与Install.ps1中的以下内容: $(get-item $ project.FullName ).lastwritetime = get-date – Phil

+0

Phil,自从我发布这个问题后,我还没有看过,但如果您有解决方案,请发表评论和答案。 –

回答

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 
相关问题