Visual Studio元数据文件名不一致

时间:2018-05-11 23:08:15

标签: visual-studio cygwin robocopy

以下似乎是Visual Studio 2017错误。我会在这里发布,看看是否有其他解释。

有时,Visual Studio会创建一个文件名以.cache结尾的文件,有时它会以.Cache结尾。区别仅在于资本化方面。

此文件的一个示例是从Visual Studio项目目录开始。

../ListEditor/obj/Debug/ListEditor.csproj.GenerateResource.cache

如果Visual Studio的操作中有某些东西可以避免这个我想知道的错误。

以下是“背景”信息,说明为什么这对我很重要,对我的询问不重要。

文件名中的这种不一致对Visual Studio和Windows的操作没有影响,因为操作系统不区分大小写。但是,它在robocopycygwin以及diff --recursive的交集中确实产生了微妙的影响。

假设进行了备份并验证如下。

robocopy c:\users\joe\documents d:\windowsbackup\documents /XJ /MIR

diff --recursive --brief /cygdrive/c/Users/joe/Documents /cygdrive/d/windowsbackup/Documents

robocopy的节约启发式方法是,如果文件的大小或时间戳发生变化,则需要复制。换句话说,robocopy并不完美,但验证旨在捕捉robocopy的错误。当没有人搞乱系统时钟并且程序没有回溯时,这些错误被认为是不可能的。但是,当复制大量数据时,执行验证可能会被认为是谨慎的,以便检测损坏。 Visual Studio在.cache.Cache之间不必要地交替产生了验证问题。由于验证发生在对区分大小写的cygwin中,因此将输出以下内容。

Only in /cygdrive/c/users/joe/Documents/source/repos/Auna4/ListEditor/obj/Debug: ListEditor.csproj.GenerateResource.cache

Only in /cygdrive/d/windowsbackup/Documents/source/repos/Auna4/ListEditor/obj/Debug: ListEditor.csproj.GenerateResource.Cache

所以diff发现了差异,但它并不是我们关心的那种差异,而且它拒绝验证文件内容以检测损坏。一种解决方案是编写脚本来收集diff输出并将其传递给cygwin cmp以执行cygwin diff拒绝执行的内容验证。 (使用Diff是因为它支持递归,但cmp不支持。)

cmp /cygdrive/c/users/joe/Documents/source/repos/Auna4/ListEditor/obj/Debug/ListEditor.csproj.GenerateResource.cache /cygdrive/d/windowsbackup/Documents/source/repos/Auna4/ListEditor/obj/Debug/ListEditor.csproj.GenerateResource.Cache

底线:当没有人类或程序化的系统时钟更改时,robocopy可能还可以,但是对于大量的数据来说,检测到损坏是很好的,但是“默认”不容易实现“给出Visual Studio文件名错误的工具。 cygwin已经延伸了“默认”工具的定义。 (目前,我不记得为什么我使用cygwin而不是Windows 10 Linux子系统。)

编辑:请注意,“MyProgram.exe.config”文件也会出现这种情况,该文件最近显示为“MyProgram.exe.Config”。

1 个答案:

答案 0 :(得分:1)

我不会在这里真正看到一个问题,只是说Visual Studio有时会对这些.cache目录的文件名大小写不一致(确实很烦人!)

使用Cygwin可以让这个游戏变得更好的一种方法就是" mount" Cygwin中带有posix=0的目录(这使得Cygwin将mount目标下的文件/目录视为不区分大小写:https://cygwin.com/cygwin-ug-net/mount.html)。

换句话说(因为必须这样做很烦人)编辑/etc/fstab以使用posix=0选项挂载Visual Studio项目的父目录,以便正确处理文件不敏感的。虽然我还没有遇到这个特定问题,但我一般认为这是在Cygwin下使用Windows应用程序的最佳选择。