【问题标题】:How can I reload a visual studio project thru a nuget powershell script如何通过 nuget powershell 脚本重新加载 Visual Studio 项目
【发布时间】:2012-09-06 03:30:03
【问题描述】:

在解决方案资源管理器中,“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")

【问题讨论】:

  • 您有没有找到更好的解决方案?我遇到了同样的问题,在 nuget 安装或更新后对项目文件的更改没有触发项目重新加载,我需要开发人员自己重新加载!我很惊讶这不是由 VS 自动处理的,特别是考虑到 nuget 包正在通过 VS 项目对象更新项目。
  • 在 8 分钟后,我在这里发布了我的最终解决方案(facepalm!)我只是在“触摸”项目文件以在 Install.ps1 中使用以下内容重新加载项目:$(get-项目 $project.FullName).lastwritetime=get-date
  • Phil,自从我发布问题后我就没有看过,但如果您有解决方案,请作为答案或评论发布。

标签: visual-studio-2010 powershell nuget envdte


【解决方案1】:

我通过“触摸”项目文件解决了这个问题,因此在包管理器关闭后触发 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多