停止Visual Basic 6改变我的shell

非常简单的问题,显然是不可能find一个像样的答案:我怎样才能让Visual Basic 6停止改变我的^ @#* ingvariables框!

我知道很多VB用户普遍认为这个“function”实际上是相当有用的,但是我怀疑他们在任何源代码控制系统中都使用它。 当您尝试与其他几个开发人员合作开发任何重要大小的项目时,这绝对是INFURIATING。 如果忽略,则会对您的文件(即使没有实际代码更改的文件)产生成千上万的错误“更改”,从而污染修订历史logging,并使某些情况下几乎不可能find发生的实际更改。

如果你不忽略它(像我的办公室,我们被迫执行一个“没有不必要的情况下改变”的政策),你花费5倍的时间,你通常会在每个提交,因为你必须仔细恢复VB的“更正“在每一个文件上,有时还会修改数百行来进行单行更改。

当然,必须有一个设置,插件,黑客等,可以删除这个不需要的“function”? 我愿意采取任何我能得到的方法,只要它不需要我通过一堆幻影差异。 并且在前面压制一些投诉:不,我不能在我的差异工具中closures案例检测,那不是重点。 不,我们不能仅仅局限于全球范围内的变化。 我们正在与多个开发人员跨越多年开发工作的数十万个LOC合作。 同步从商业angular度来看是不可行的。 最后:不,我们不能升级到VB.net或移植到另一种语言(尽可能多的)。

(是的,我现在只是一个小小的问题,你能告诉我吗?我的歉意,但是这花费我的时间和我的公司的钱,我不觉得可以接受。)

这是一个真实的世界情景,以及我们如何为我们的350k LOC VB6项目解决这个问题。

我们正在使用Janus Grid,并且在某些时候,引用JSColumn的DefaultValue属性的所有代码行都变为defaultValue。 这是一个debugging整个IDE麻烦的机会。

我发现刚刚添加了对MSXML的引用,现在IDE在Janus Grid typelib之前拾取了ISchemaAttributes的defaultValue属性。

经过一些实验后,我发现IDE按以下顺序收集“注册”标识符:

  • 从项目 – >参考文献的引用库/项目按照它们列出的顺序

  • 项目 – >组件控件(未知顺序)

  • 源代码

所以我们做的简单的解决方法是创build一个虚拟的类/接口与持有我们适当的套pipe的方法。 因为我们已经有了一个项目范围的typelib,所以我们在任何其他types库之前引用了每个项目,这是无懈可击的。

这里是我们的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类也可以做到这一点。

这样,我们的源代码在某些时候会聚到合适的shell上,因为在签出时,IDE实际上按照IUcsVbIntellisenseFixshell固定了shell。 现在,即使我们尝试,我们也不能拼错枚举,方法或属性。

根据你的情况添加

 #If False Then Dim CorrectCase #End If 

可能有帮助。

简单的方法:在需要的情况下将每个variables调小。 否则, VBA会以一种不可理解的方式改变它。

 Dim x, X1, X2, y, Yy as variant 

在一个子程序中会将所有的情况改变为Dim语句中的情况

我可以同情。 幸运的是,我们可以在我们的版本控制差异工具中closures区分大小写!

看起来VB6 IDE的自动校正function会偶尔改变variables声明和引用中的大小写,这可能取决于VBP文件中列出模块的顺序吗? 但IDE不会告诉你该文件需要保存。 所以这个问题只会在你保存文件的时候显示, 我们试图通过检查项目中的所有文件并仔细设置案例来防止这种情况发生,但这并没有消失。

我想你可以列出受影响的variables名称 – 通常的嫌疑人是一个字母名称,如“我”,“X”和“Y”,也许是因为它们用在像MouseDown这样的标准事件处理程序中。 然后编写一个加载项,search所有声明“As”,并强制上面的情况。 在检查模块之前,在模块上运行加载项。当您保存在VB6中时,可能会触发加载项自动运行。

编辑:我刚刚想到的东西:适应弗雷德的答案 。 从现在开始,每次检查文件,在顶部添加一个块,为通常的嫌疑人build立规范的情况。 如果没有其他的东西,比手工回复数百行更容易。 最终你会在每个文件中都有这个块,也许这个问题就会停止。

 #If False Then Dim I, X, Y ' etc ' #End If 

我在整个代码库中标准化了这个案例,通常使用上面的例子( Dim CorrectCase ),然后再去掉它。 然后我触发VB来保存每个文件,通过做一个区分大小写的search/replace“结束”与“结束”(没有function的变化,但足以让VB重新保存)。 一旦完成,我可以做一个单一的提交来标准化案件,使之更容易保持在以后的顶部。

特别是为了控制枚举值的情况下 ,有一个VB6 IDE插件可能会有所帮助。 枚举似乎有这个问题的一个稍微独特的版本。

如下面的链接所述:

当谈到Enum成员的情况时,VB6 IDE有一个恼人的怪癖。 与其他标识符不同,IDE不强制枚举成员在Enum块中声明的情况。 偶尔会导致手动编写的Enum成员失去原来的情况,除非编码人员仔细input。 …

但是,如果一个项目包含很多枚举和/或一个特定的枚举拥有很多成员,那么在每个枚举中重新分配成员可能会非常繁琐。 …

参考: http : //www.vbforums.com/showthread.php? 778109-VB6-modLockEnumCase-bas-Enforce-Case-of- Enums

…通过“加载项pipe理器”对话框根据需要加载和卸载加载项。 用法与select整个Enum块一样简单,右击,然后select“Lock Enum Case”上下文菜单项。

我不认为有这样做。 IDE会将variables名的大小写更改为声明时的大小写。 但是,说实话,早在我从事几个大型VB6项目的时候,从来没有发现这是一个问题。 为什么开发团队中的人员经常更改variables声明? 看起来你没有build立一个明确的variables命名策略,你执行。 我知道你的不安,所以没有冒犯,但这可能是你的政策缺乏这方面的。

不幸的是,根据这个SO线程 ,交替的VB6 IDE很难得到。 所以,你最好的select是通过政策来解决这个问题。 或移动到VB.NET。 🙂

哇。 我花了很多时间在VB6编程,我不知道你在做什么。 我认为你所指的唯一的事情就是intellisense将会改变variables名的大写来匹配它们的声明。 如果你对此抱怨,我不得不想知道为什么他们以其他方式进入地狱。 如果这是你的问题,不,没有办法禁用,我知道。 我build议你一口气检查每个文件,确保variables的声明和使用上限都匹配并重新检入。