【问题标题】:Adding and removing multiple references across projects in Visual Studio在 Visual Studio 中跨项目添加和删除多个引用
【发布时间】:2012-04-04 20:55:29
【问题描述】:

我有一个包含 50 或 60 多个 csproj 文件的大型项目。我需要删除 6 或 7 个现有引用并在所有这些项目中添加 10 或 15 个新引用。是否有批量添加引用和删除引用的机制?

或者,如果有办法说,在所有项目中将引用 X 替换为 Y,那也会非常有帮助。让我补充一点,Nuget 不是一个选项。

【问题讨论】:

  • 我希望 Visual Studio 团队能够创建某种适配器,让当前的 VS 解决方案看起来像一个本地 Nuget 存储库,解决方案中的每个项目看起来像一个 Nuget 包。那么你就可以轻松做到这一点了。
  • 如果引用是 NuGet 包,这可能会有所帮助:stackoverflow.com/a/45898835/1014320

标签: visual-studio visual-studio-2010 refactoring resharper


【解决方案1】:

这很简单:只需编写一个脚本,打开所有.proj 文件,删除不需要的行并添加需要的行。这是最简单的方法。我认为也有为 VS 或 ReSharper 编写插件的选项,但是这两个选项都过大了。项目文件毕竟只是 XML 文件(=文本文件),可以这样处理。

当然,如果您发现这是一个循环操作,或者如果您需要遵守一些条件逻辑,那么编写插件是一个明智的选择。

【讨论】:

  • 谢谢。我绝对可以编写一个脚本来执行此操作(并且拥有)。但是,我想知道是否有一个工具已经可以做到这一点?我相信应该有几个人面临这种​​情况。
  • 不。我当然没有听说过这样的工具。
  • 谢谢。我也意识到,我一直认为这应该是管理引用的一个非常常见的用例。
【解决方案2】:

您可以通过使用AutoHotKey 编写脚本/宏来添加对 Visual Studio 中多个项目的引用。

下面的方法与 Visual Studio 的运行副本交互,而不是直接操作项目文件中的文本,它利用了这样一个事实,即您可以在没有鼠标且仅使用键盘的情况下完成所有(大多数?)事情。它通过向 Visual Studio 发送适当的按键来工作,以便它找到适当的项目、右键单击、打开引用等。

要使脚本正常工作,您需要在执行脚本之前打开 资源视图 窗口并突出显示项目。这样它就可以按名称搜索项目(解决方案资源管理器可能有阻止这种情况的文件夹)。 您还需要通过重命名项目窗口SolutionName 和要添加的参考名称​​ReferenceName 来调整脚本。 projects.txt 只是与 AutoHotKey 脚本位于同一目录中的文本文件,其中包含您希望添加引用的项目列表。

注意:我使用的是 Visual Studio 2008。此外,我没有使用任何科学方法来确定我的睡眠时间,它们甚至可能没有必要。这是一个战术解决方案,脚本无疑可以优化和改进。

; Prepare array from project list
ArrayCount = 0 ; Initialise array counter
Loop, Read, projects.txt   ; This loop retrieves each line from the file, one at a time.
{
ArrayCount += 1  ; Keep track of how many items are in the array.
Array%ArrayCount% := A_LoopReadLine  ; Store this line in the next array element.
}
IfWinExist SolutionName - Microsoft Visual Studio (Administrator) ; Check if VS2008 with solution is running
{
WinActivate ; Bring a window to front
Loop %ArrayCount%
{
	element := Array%A_Index% ; Grabs current project name from array
	Send % element ; types the name of the project
	Sleep 100
	Send {AppsKey}F{Tab}{Tab}{Space}
	Sleep 100
	Send ReferenceName{Enter}
	Sleep 100
	Send {Enter}
	Sleep 100
}

}
else
{
MsgBox Cannot find "SolutionName - Microsoft Visual Studio (Administrator)" window.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    相关资源
    最近更新 更多