Tlbexp.exe在2012年和2010年输出不同的TLB信息

本文关键字:TLB 信息 输出 2010年 exe 2012年 Tlbexp | 更新日期: 2023-09-27 18:09:38

我有一个c#程序集,使用"$(FrameworkSDKDir)'Bin'NETFX 4.0 Tools'tlbexp.exe" "$(OutDir)My.dll"/out:"$(TLBDir)My. exe"。这样我就可以从本地组件调用它

我正在看在两台机器上生成的。TLH是不同的,它似乎是一个类似的问题,但我的区别是在visual2010中,TLH是使用一种情况生成的,而在2012中,它是使用不同的情况生成的。

更有趣的是,这件事发生在一天前。我有一个从18号开始的构建,工作得很好,并且代码在许多天内没有改变任何解决方案。

在我继续/Names选项之前有什么想法吗?

Tlbexp.exe在2012年和2010年输出不同的TLB信息

我不能简单地告诉你如何解决这个问题,只是强调为什么会发生这种情况。它与Tlbexp.exe没有太多关系,它是在Windows内置的类型库支持中实现的通用行为。

它有一个棘手的问题要解决,它不能对用于生成类型的类型语言做出任何假设。麻烦制造者是不区分大小写的语言,Visual Basic就是一个典型的例子。也是为类型库而发明的原始语言。问题是,它可能发出的名称在不同的声明中有不同的大小写,但标识相同的类型。如果类型库使用相同的大小写,那么它只能被语言不敏感的编译器使用。

所以它做了一些事情,它使用的算法最多只能被描述为。它查看任何名称,不管它使用声明的哪个部分,然后强制它遇到的任何后续相同名称的大小写相同。通常的大意外是由函数参数的名称引起的。如果碰巧匹配,它们可以更改函数的名称。所以一个很常见的"item"参数会破坏"item"属性的名称。或者反过来。

这里的通配符是order,我想这可能是半个解释。

解决这个问题的最好方法是更改名称,这样就不会再有冲突了。你很容易就能找到它们,它是换了外壳的那个。您可能需要迭代几次才能找到它们。考虑到通常是参数的名称导致这种情况,请随意更改参数名称。例如,它不会破坏二进制兼容性,也不会破坏客户机代码。