6

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

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

4

2 回答 2

1

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

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

于 2012-04-05T19:21:10.797 回答
1

您可以通过使用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.
}

于 2014-12-03T11:18:37.310 回答