在Visual Studio中比较两个文件

546

我在Visual Studio 2012中看到了新的比较工具,可以用于比较两个文件或同一文件的两个版本。我很喜欢它。但当我尝试查找它时,我找不到它,因为我没有使用TFS

有没有办法只使用Visual Studio内置的功能(而不需要TFS)来比较两个文件?


2
仅供参考:如果您正在使用vs2015,请使用此链接:https://www.visualstudio.com/en-us/docs/tfvc/compare-files - Elnaz
请注意,这仍适用于VS 2017。因此,我已经提供了一个答案来舒适地解决这个问题。 - Matt
2
没有一个答案可以比较在 Visual Studio 中已经打开的两个文件。 - Just a HK developer
2
请在此处为此功能投票:https://developercommunity.visualstudio.com/content/idea/619706/is-there-a-way-to-compare-two-files-from-solution.html - Happypig375
1
在VS2017和VS2019中,即使比较文件工具栏已经打开,也不知道如何使用它...现在使用VSCode,只需打开两个文件并选择两个文件,然后右键菜单->比较所选内容。 - jw_
使用WinMerge更加方便,而且它是开源的。 - live-love
18个回答

959
您可以从Visual Studio开发人员命令提示符中调用devenv.exe /diff list1.txt list2.txt,或者如果已经有Visual Studio实例在运行,则可以在Command窗口中键入Tools.DiffFiles,并使用方便的文件名自动完成功能:

20
这个diff工具是否提供一些实用的功能,比如复制到左侧、复制到右侧等?当我将工作副本与服务器版本进行比较时,有时希望撤销一些更改,这时就需要手动复制粘贴。 - Samuel
153
为什么这个功能在 VS UI 中被隐藏了? 这是比较两个文件最简单和有效的方法... - eka808
89
对于那些不熟悉Visual Studio的人,可以通过以下步骤打开命令窗口:点击“视图”->“其他窗口”->“命令窗口”(VS专业版2013),或使用CTRL+ALT+A快捷键。请注意,翻译过程中不会改变原文意思,也不会添加任何额外解释或内容。 - Cleanshooter
45
很遗憾,VS没有这个非常基本的功能的菜单项。许多IDE/编辑器都有。 - dewd
28
注意:在Visual Studio 2015中,你可以在这里找到它:查看 -> 工具栏 -> 比较文件。只需要在快速启动窗口中输入“compare”,就会将它添加进去。 - Matt
显示剩余14条评论

137

I) Visual Studio 17.7.0 预览版 5

在最新的 Visual Studio 预览版(版本 17.7.0 预览版 5.0)中,您现在可以使用解决方案资源管理器中的上下文菜单来比较文件。

示例:

Compare two files example

要么你选择一个文件,然后通过上下文菜单中的“与...比较”选项选择第二个文件(屏幕截图左侧)。
要么你选择两个文件,然后在上下文菜单中使用“比较所选”选项(屏幕截图右侧)。
(第三个选项-将其标记为“选择进行比较”也存在,但我怀疑你会经常使用它)
这是一个很大的改进!
然而,如果你想从Visual Studio之外触发文件比较(拖放或通过Windows文件资源管理器的上下文菜单),你可以阅读我发布的原始答案(下面),这现在是你有的另一种选择(或者如果你使用较旧版本的Visual Studio,则是唯一的选择)。
受到Vladimir Reshetnikov的回答的启发,我发现了一种非常方便的方法,可以通过使用拖放或通过“发送到”上下文菜单来立即比较两个文件。它只需要一点准备工作,你只需要做一次,然后它就像一把瑞士军刀一样有用。
Visual Studio已经具备了你所需的一切,只需要进行一些配置步骤即可使其正常工作:
II)使用拖放进行文件比较
准备工作:
  1. 使用您喜欢的文本编辑器创建一个新的批处理文件。输入以下内容:

    @echo off
    setlocal
    set vspath=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE
    start "比较文件" /B /MIN "%vspath%\devenv.exe" /diff %2 %1 First:'%2' Second:'%1'
    

    您可能会注意到,我在批处理中颠倒了%1%2参数的顺序。这是因为我注意到文件资源管理器将第二个文件作为第一个参数传递,然后将第一个文件作为第二个参数传递。

  2. 将此代码保存为VS_FileCompare.cmd并使用它,如果需要,请修改vspath以匹配devenv.exe的位置(根据您当前使用的Visual Studio版本,请参见脚注

  3. 要么为VS_FileCompare.cmd创建一个名为"文件比较"的快捷方式,并将其放置在桌面上(如下面的动画所示),以便随时可以将文件拖放到其中,或者直接将批处理文件放置在桌面上。就这样!

使用方法:

  1. 通过按下 Win + E 组合键打开Windows资源管理器

  2. 在资源管理器中选择两个要比较的文件

  3. 按照下面的动画所示,将它们拖放到指定位置:

    拖放演示

  4. 几秒钟后(取决于Visual Studio的启动时间),结果将显示在Visual Studio中:

    Visual Studio视图

注意:如果Visual Studio已经打开,不会有任何影响。在这种情况下,它只会在运行中的Visual Studio实例中打开一个新窗口。因此,您可以比较多个文件对,但请确保每次只选择两个文件。


III) 替代方法:通过“发送到”上下文菜单

这是一个替代方法,您可以使用上面提到的批处理文件VS_FileCompare.cmd。它允许使用上下文菜单中的“发送到文件夹”来比较文件。

准备工作:

  1. 为批处理文件VS_FileCompare.cmd创建一个名为"Compare2Files VS"的快捷方式,并将其复制到发送到文件夹中。通过按下Win + E组合键打开Windows资源管理器
  2. 通过在文件资源管理器的地址栏中输入shell:sendto(如此处所述),打开发送到文件夹。然后,将准备好的快捷方式放入该文件夹中。

使用方法:

  1. 通过 Win + E 快捷键打开 Windows 资源管理器
  2. 在资源管理器中选择两个要进行比较的文件
  3. 假设批处理文件 VS_FileCompare.cmd 的快捷方式命名为 "Compare2Files VS",您可以选择这两个文件,右键点击并选择 发送到 → Compare2Files VS 来执行比较操作,如下图所示:

    SendTo

  4. 几秒后(取决于 Visual Studio 的启动时间),结果将在 Visual Studio 中显示:

    Visual Studio View

提示:如果您喜欢使用SendTo文件夹的方法,您还可以做更多的事情 - 例如,您可以直接通过SendTo打开命令Shell,并且它会以正确的路径(选择的文件所在的路径)开始。点击这里找出如何做到这一点。您甚至可以将其与脚本结合起来,通过额外的努力获得提升的权限


MSDN参考文档:


*) 注释:由于vsPath(指向DEVENV.exe的路径)根据您使用的Visual Studio版本而有所不同,因此我将描述如何找到它(适用于Windows 10):

Windows开始菜单Windows Icon Small,找到Visual Studio图标Visual Studio Icon Small
右键单击以弹出上下文菜单。选择更多打开文件位置。Windows资源管理器将打开,并突出显示Visual Studio快捷方式。
右键单击Visual Studio并选择属性
在属性对话框中,您可以在"目标:"中找到路径。 VSProperties

使用Screen to gif创建的动画


14
这确实是一个非常好而且详尽的答案,绝对应该被投票支持。我来自那些即使答案已经在帖子中标记了也仍在寻找创新答案的人群,所以我完全会为它点赞。 - Mantra
4
@DivTiwari - 谢谢,很高兴听到这个消息! - Matt
3
那真是太棒了,非常有效。非常感谢,伙计。 - Sabbir Hassan
4
很好!给这个点赞。只是喜欢这种解决方案的“hackish”风格。谢谢你的分享。 - Leo Gurdian
2
从Visual Studio 2017开始,有一个命令行工具可以找到最新安装的VS的路径:C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe。在for循环中解析其输出将获得Visual Studio的路径。 - Tsahi Asher
显示剩余11条评论

81

1
我安装了这些扩展,但是这个选项对我来说不可用。 - PeterX
3
在VS 2015 Update 1 Community中,VSCommands 14未添加截图中的任何项目。 - Mark Toman
最新版本的链接已损坏。 - user2261062

61

(命令窗口) (Ctrl + Alt + A):

Tools.DiffFiles File1 File2

这与另一个答案相同。 - niico
14
也许 - 尽管我个人更喜欢使用图形用户界面来选择文件,而不是必须在任何情况下手动构建两条路径 - 我的意思是现在已经不是1984年了。 - niico
2
谢谢,这绝对是这里最简单的解决方案!@nico 我真的不明白你的观点,你是一个程序员(也输入代码),还是只想使用Visual Studio比较文件? - Dejan Dozet
@DejanDozet 我相信niico所指的是Vladimir的答案第一部分中提到(并插图)了Tools.DiffFiles这一事实。 - Wayne Ivory

55

3
这个回答需要更高的排名。这是这个问题唯一相关的答案。来到这个帖子的每个人都在寻找这个,而且仅仅是这个。我花了几个小时来寻找这个扩展程序,因为前两个答案完全无用,所以我认为整个页面都毫无用处...由于我不熟悉术语"diff",使用关键字"compare",所以经历了很大困难。 - Gappy Hilmore
1
我完全同意@GappyHilmore的观点。回退到插件只需要一分钟的时间来下载和安装,而且正好满足了大家的需求。只需在解决方案资源管理器中选择两个文件,然后从上下文菜单中选择“比较文件...”。 - Bobbie E. Ray
对我没起作用。我有两个文件/命名空间拥有类。有相同的类位于不同位置,比较结果显示已删除,实际上它们存在。但是我认为针对只有一个类的正式文件比较可以工作。 - Inshal Irshad

25

还能够比较文件夹 - 非常强大。 - Jaans
2
WinMerge 的唯一缺点是其有限的识别更改能力(例如空格、分成多行的行等)。 - user586399
链接损坏了:“嗯,我们遇到了找不到该站点的问题。我们无法连接到 blog.paulbouwer.com 服务器。” - Peter Mortensen
@user586399 看起来这个问题在最近的版本中已经被解决了。顺便说一下,这个可爱的解决方案仍然可用于2021年。 - carloswm85

24

还有一个名为CompareFiles的Visual Studio扩展,它的唯一作用是在Solution Explorer上下文菜单中添加“比较文件”条目。它调用了内置的Visual Studio差异工具。

以防万一有人(例如我)不想安装像VSCommands这样的全能扩展...


1
注意:此扩展仅适用于VS2012,但您可以编辑清单文件以轻松支持VS2013 - 有关详细信息,请参阅扩展的Q&A选项卡上的我的评论。(我需要此功能,但由于其许可证,无法在工作中使用VSCommands的免费版本。) - James S
Visual Studio Comparison Tools可以在2013年版本中使用,下载地址为http://visualstudiogallery.msdn.microsoft.com/4a139744-7b66-4976-abbd-184323333a0a?SRC=VSIDE。 - AlignedDev

20

对于Visual Studio 2019,File Differ插件允许比较不同项目中的文件:

Enter image description here

Enter image description here

你可以从这里安装它:

Enter image description here

旧版:

对于Visual Studio 2017,安装*[FileComparer2017][4]*。

问题在于您无法比较不同项目中的文件,但可以将同一项目中的文件复制以进行比较...

文件差异


新版: 对于Visual Studio 2017,安装*[FileComparer2017][4]*。

问题是您无法比较不同项目中的文件,但可以将同一项目中的文件复制以进行比较...

文件差异


2
不幸的是,当尝试比较两个没有解决方案的文件时,这种方法无法使用(例如,在文件夹模式下打开VS2017:打开-文件夹)。 - Yury Kozlov
我正在寻找的东西,没想到是一个扩展。太棒了! - Ben Palmer

17
在Visual Studio 2012、2013、2015中,您也可以使用Web Essentials来完成此操作。只需右键单击文件,然后从上下文菜单中选择→Web EssentialDiff selected files:

Enter image description here

它也可以作为单独的扩展使用。


我在Web Essential - VS 2015中没有看到选择文件差异或将Markdown编译为HTML的选项。 - usefulBee
我已经安装了 VS 2015 的新版本,但为什么我看不到 Diff selected files 选项? - Shaiju T
请安装我提到的扩展。 - Hamid Mosalla

15

谢谢,对我来说完美无缺。 c:\temp>"%VS120COMNTOOLS%..\IDE\vsdiffmerge.exe" 1256.txt 1256_PROD_Original.txt - Craig B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接