非常简单的问题,显然不可能找到一个体面的答案:我如何使Visual Basic 6停止更改我的^ @#* ing变量大小写!!!
我知道许多VB用户的普遍看法是,此“功能”实际上是很有帮助的,但是我怀疑他们在任何源代码控制系统中都使用它很多。当您尝试与其他几个开发人员进行任何规模的项目协作时,这绝对是令人不快的。如果忽略,则会对文件产生成千上万个错误肯定的“更改”(甚至没有实际代码更改!),这会污染修订历史,并在某些情况下几乎不可能找到发生的实际更改。
[如果您不忽略它(例如我的办公室,在那儿我们被迫实施“不需要更改案例”的政策),那么您在每次提交时所花费的时间是通常的5倍,因为您必须仔细地还原VB的每个文件上的“更正”,有时会还原成百上千行以更改为一行。
当然,必须有一个设置,插件,黑客程序等可以消除此不必要的“功能”?我愿意采取任何我能得到的方法,只要它不需要我挑选成堆的幻影差异即可。并且要预先解决几个抱怨:不,我无法在diff工具中关闭案例检测,这不是重点。不,我们不能仅在全球范围内进行案例更改。我们正在与数十万开发人员合作,跨越数十年的开发工作。从业务角度来看,这是不可行的。最后,最后:不,我们不能升级到VB.net或移植到另一种语言(如我所愿)。
(是的,此刻我有点生气。你能告诉我吗?我很抱歉,但这浪费了我的时间和我的公司资金,我认为这不能接受。)
这是一个真实的场景,以及我们如何为350k LOC VB6项目解决它。
我们正在使用Janus Grid,并且在某些时候,所有引用JSColumn的DefaultValue属性的代码行都转换为defaultValue。这是调试整个IDE麻烦的机会。
[我发现是已经添加了对MSXML的引用,现在IDE在Janus Grid typelib之前获取了ISchemaAttributes的defaultValue属性。
经过一些实验,我发现IDE按照以下顺序收集“注册的”标识符:
Project->中的参考图书馆/项目的参考文献按列出的顺序排列
来自项目的控件->组件(顺序未知)
源代码
因此,我们所做的简单修复是使用持有适当大小写的方法创建一个虚拟类/接口。由于我们已经有一个项目范围的typelib,因此我们在每个其他typelib之前都引用了每个项目,因此这样做很容易。
这里是我们的IUcsVbIntellisenseFix接口的IDL的一部分:
[
odl,
uuid(<<guid_here>>),
version(1.0),
dual,
nonextensible,
oleautomation
]
interface IUcsVbIntellisenseFix : IDispatch {
[id(1)] HRESULT DefaultValue();
[id(2)] HRESULT Selector();
[id(3)] HRESULT Standalone();
...
}
我们向IUcsVbIntellisenseFix添加了很多方法,其中一些方法是根据我们以前用来拼写错误的枚举项以及我们要修复的内容命名的。使用每个项目都引用的公共库(ActiveX DLL)中的简单VB类,可以完成相同的操作。
这样,我们的源代码在某些时候会收敛到正确的大小写,因为在签出IDE时,实际上按照IUcsVbIntellisenseFix大小写了[固定]大小写。现在,即使尝试这样做,也无法拼写错误的枚举,方法或属性。
Dim
。否则,VBA
会以无法理解的方式更改它。Dim CorrectCase
),然后再次将其删除,从而在整个代码库中对大小写进行了标准化。然后,我通过执行区分大小写的搜索/用“ End”替换“ End”(不进行功能更改,但足以使VB重新保存)来触发VB保存每个文件。一旦完成,我就可以进行一次提交以使案例标准化,从而使以后更容易掌握它。专门用于控制枚举值的大小