我有一个包含超过50或60个csproj文件的庞大项目。我需要删除退出引用的6或7个引用,并在所有这些项目中添加10或15个新引用。是否有批量添加引用和删除引用的机制?
或者如果有办法说,在所有项目中用Y替换参考X,这也非常有用。让我补充一点,Nuget不是一个选择。
答案 0 :(得分:1)
这个很简单:只需编写一个脚本,打开所有.proj
文件,删除不需要的行并添加您执行的行。这是最简单的方法。我认为还有为VS或ReSharper编写插件的选项,但这两个选项都是矫枉过正的。毕竟,项目文件只是XML文件(=文本文件),可以这样处理。
当然,如果您发现这是一个重复操作,或者您需要遵守某些条件逻辑,那么编写插件是一个明智的选择。
答案 1 :(得分:0)
您可以使用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.
}