是否使用修改时间戳或/并检查实际内容是否已更改(例如通过比较校验和)?
编辑:我需要知道这一点,因为我使用Git进行源代码管理并经常更改分支。有时即使我更改了分支并强制(例如从开发到 master 然后再回到 develop ),VS重建一半的源文件。我想知道为什么会发生这种情况,为什么有时会发生这种情况,而其他时候却不会发生。
答案 0 :(得分:5)
由于Visual Studio是一个闭源项目,我敢打赌只有开发人员能够就其确切运作方式给出明确的答案。但是,就我的目的而言,测试一些场景就足够了。
我用一个小解决方案和一些文件测试了它(一个标题和两个源文件)。测试结果得出以下结论。 Visual Studio查找修改日期和时间。即使文件内容相同 - 它也会编译此文件以及包含它的任何其他文件。如果修改日期和时间相同 - 即使内容不同,也不会重新编译它。 Visual Studio忽略创建和访问日期和时间。
答案 1 :(得分:2)
我猜它在项目目录和链接文件(如果有的话)上使用FileSystemWatcher
,只是因为这是做这种事情的正确方法。
一些谷歌搜索发现更多关于这个类(或只是自己查找):
当然,当源文件打开时,它是编辑时的内容,以及任何用户更改(甚至未保存)都会加载到RAM中,但它不会将其与磁盘内容进行比较(即d太慢了),当系统告诉它文件发生变化时,它会监听系统事件。
<强>更新强>
可能不是那个类itlf,而是它的Win32版本,你知道大多数与系统相关的.NET功能类只是Win32包装器。
从StackOverflow回答:How does FileSystemWatcher work on another computers directory?
我认为它包装了这个API(不确定):http://msdn.microsoft.com/en-us/library/aa365465.aspx
更新2:
这是Microsoft监控文件更改的方法:
http://msdn.microsoft.com/en-us/library/chzww271(v=vs.80).aspx
更新3
这是一个老答案,上面提到它是一个猜测,因为Visual Studio是其他答案中提到的闭源。值得一提的是,接受的答案表明Visual Studio会查找文件修改日期,这表明它不会使用此答案中猜到的方法,并且错误
我希望读者不介意在这个答案中合理化可能性的努力(导致读者不舒服或投票减少)。仅保留档案原因。