我们有一个混合的VB6 / Net应用程序,其中Net dll使用Com Visible Net包装器连接到VB6代码。使用带有清单的RegFreeCom激活此包装器。此设置适用于我们超过2年。为了减少应用程序启动时间,我们在安装后使用NGen预编译Net dll。这需要一分钟才能完成。现在我们有一个新的VB6可执行文件,带有新的dll和新的清单,但是当我们将程序安装到现有位置时,似乎没有使用新的dll,从而替换了dll。对不同文件夹的新安装确实使用了新的dll。我检查了两个程序文件夹,两个位置都有新的dll和manifestss。如何才能在现有程序位置拾取新的dll并且Windows似乎继续使用先前版本的预生成代码?
我注意到NGenning在几秒钟内完成了声明编译后的图像是最新的,这显然不是。更改dll的版本号是不是足以触发创建新图像?目前我们没有对dll进行数字签名。
答案 0 :(得分:1)
在调用NGen处理程序集后,.NET Framework会在本机映像缓存中保留一个缓存版本,程序会在默认情况下尝试加载,而不是程序集。因此,用新的组件替换旧组件不会影响您的程序。
通过调用NGen卸载缓存版本,程序可以看到您的新程序集,一切都开始工作。
可以在互联网上找到更多技术细节,例如
答案 1 :(得分:1)
你可能犯的错误太多,你的问题无助于缩小范围。您可能忘记更新VB6项目中的类型库引用,类型库仅支持major.minor版本号,GAC中可能存在副本,可能存在杂散的注册表项,您的清单可能根本不会使用,它可能是一个简单的部署oops,你可能增加了错误的程序集属性(如AssemblyFileVersion)。等等。
您需要使用诊断工具来查看实际情况,以便缩小可能的原因: