Visual Studio元数据文件名不一致

问题描述 投票:0回答:1

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

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

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

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

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

以下是关于为什么这对我很重要并且对我的询问不重要的“背景”信息。

文件名中的这种不一致对Visual Studio和Windows的操作没有影响,因为操作系统不区分大小写。然而,它确实在robocopycygwindiff --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”。

visual-studio cygwin robocopy
1个回答
1
投票

我没有真正看到这里的问题,除了说Visual Studio有时与这些.cache目录的文件名大小写不一致(确实很烦人!)

使用Cygwin可以更好地发挥这种作用的一种方法是使用posix=0将该目录“挂载”在Cygwin中(这使得Cygwin将挂载目标下的文件/目录视为不区分大小写:https://cygwin.com/cygwin-ug-net/mount.html)。

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

© www.soinside.com 2019 - 2024. All rights reserved.