很简单的问题是显然不可能找到一个像样的答案:我怎样才能使Visual Basic 6的停止改变我^ @#*荷兰国际集团可变外壳!?!
我知道,许多VB用户的普遍看法是,这个“功能”其实是相当有帮助的,但我怀疑他们有任何的源代码控制系统多使用它。 这绝对是令人气愤,当你试图在任何显著的大小与其他几个开发项目合作。 如果忽略了,你生产数以千计的污染修订历史记录,使其几乎不可能在某些情况下,找到所发生的实际变化假阳性“变化”将您的文件(甚至是那些没有实际的代码更改!)。
如果不忽略它(如我的办公室,在那里我们已经被迫实行“无不需要的情况下,改变”政策),你花5倍的时候,你通常会在每次提交,因为你必须认真回复了VB的“更正“在每一个文件,把在一行中的变化有时回复数百行。
当然必须有一个设置,插件,黑客等在那里,可以删除这个多余的“功能”? 我愿意采取任何方法,我可以得到,只要它不要求我通过幻象的diff成堆来接。 和壁球一对夫妇抱怨前面的:不,我不能关闭的情况下检测我的比较工具,这不是问题的关键。 不,我们不能只让全球的情况下改变。 我们正在与数十万LOC的多个开发跨越多年的发展正在处理的工作。 同步,是不是从商业的角度来看是可行的。 而且,最后:不,我们不能升级到VB.net或端口到另一种语言(尽管我很想)。
(是的,我目前只是一点点气恼。你可以做到吗?我道歉,但是这是我花费时间和我公司的钱,我没有找到可以接受的。)
这是一个真实的场景,以及我们如何解决它为我们的350K LOC VB6项目。
我们使用杰纳斯网格和在某些时候所有这些引用JSColumn的默认值属性的代码行变为默认值。 这是为了调试整个IDE滋扰的机会。
我发现的是,到MSXML参考刚刚被添加,现在IDE拿起ISchemaAttributes'剑锋电网类型库之前,默认值属性。
一些实验后,我发现该IDE收集“注册的”标识符按以下顺序:
从项目 - 引用的库/项目>的顺序引用它们列出
从项目 - >组件的控制(以未知顺序)
源代码
所以我们做了简单的解决是建立与保持我们的正确方法外壳伪类/接口。 既然我们已经有了一个项目范围的类型库,我们从任何其他类型库之前,每一个项目中引用,这是做无痛人流。
这里是IDL我们IUcsVbIntellisenseFix接口的一部分:
[
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外壳。 现在,我们不能拼错枚举,方法或属性,即使我们尝试。
根据您的情况添加
#If False Then
Dim CorrectCase
#End If
可能有帮助。
简单的方法: Dim
中所需的情况下,每个变量。 否则, VBA
会的方式,是不是可以理解的改变。
Dim x, X1, X2, y, Yy as variant
在子程序会改变所有的情况下那些在Dim
声明
我可以同情。 幸运的是,我们是可以关闭的情况下的灵敏度在我们的版本控制差速器工具!
看来VB6 IDE自动情况下修正偶尔在变量声明和引用变化的情况下,或许取决于其模块在VBP文件中列出的顺序? 但IDE不会告诉你该文件需要保存。 所以,问题只出现在你保存,因为其他编辑的文件。 我们简要地试图通过在一个项目中检查出所有的文件和设置小心的情况下,以防止这一点,但它并没有消失。
我想你可以列出受影响的变量名 - 通常的嫌疑人一个字母的名字,如“I”,“X”和“Y”,也许是因为他们在标准的事件处理程序类似的MouseDown使用。 然后写一个加载项,将搜索所有的声明“为”和的情况下强行上。 运行在你的模块加载在你检查之前,你也许能够触发外接当你在VB6保存自动运行。
编辑:一些我刚刚想到的:适应弗雷德的答案 。 从现在开始,每次签入文件时,在顶部加入一个块,建立规范的情况下,对于常规的做法。 如果不出意外,这比手工恢复数百行更容易。 最终,你将拥有这个区块中的每个文件和可能,那么问题将停止发生。
#If False Then
Dim I, X, Y ' etc '
#End If
我标准化的情况下在整个代码库,通常通过使用上述实施例( Dim CorrectCase
),并再次将其移除。 然后,我触发VB保存每个文件,做一个区分大小写的搜索/的“结束”和“结束”取代(无功能的变化,但足以让VB重新保存)。 这项工作完成,然后我可以做一个单一的承诺标准化的情况下,使它更容易保持在它的上面在稍后的日期。
具体而言,用于控制枚举值的情况下 ,存在一个VB6 IDE插件可以是有帮助的。 枚举似乎有这个问题的一个轻微的独特版本。
如在下面的描述链接:
VB6的IDE有一个恼人的怪癖,当涉及到枚举成员的情况。 不像其他标识符,IDE不执行,因为它是在枚举块中声明一个枚举部件的情况下。 有时会导致这是手工编写失去其原有的情况下,除非编码器键入它不够仔细枚举成员。 ...
但是,如果一个项目包含了很多枚举和/或特定的Enum有很多成员,重新声明在他们每个人的会员可以得到相当繁琐快。 ...
参考: http://www.vbforums.com/showthread.php?778109-VB6-modLockEnumCase-bas-Enforce-Case-of-Enums
...负载,并通过加载项管理器对话框,根据需要卸载加载项。 用法是选择整个枚举块,右键单击,然后选择“锁定枚举案”上下文菜单项一样简单。
我不认为有任何这样做。 IDE将改变变量名到不管它是什么,当它宣布此案。 但是,说实话,早在一天我曾在几个大项目VB6,从来没有发现这是一个问题。 为什么人们对你的开发团队不断变化的变量声明? 好像你还没有建立你执行一个明确的变量命名策略。 我知道你不高兴,所以没有犯罪,但也可能是缺乏在这方面,您的策略。
不幸的是,根据本SO线程 ,备用VB6 IDE是很难得的。 所以,最好的办法是通过政策来解决这个问题。 或者移动到VB.NET。 :)
哇。 我花了很多时间VB6编程的,我不知道你在说些什么。 我能想到你指的是唯一的一点是,智能感知会改变变量名的大小写,以满足他们的声明。 如果你抱怨的是,我会想知道为什么地狱,他们已经签订的其他任何方式的开始。 如果这是你的问题,没有,有没有方法来禁用它,我所知道的。 我建议你,一气呵成,检查每一个文件,确保在声明和变量的用途全部匹配的帽子,并检查回。