我们有一个VB6/Net混合应用程序,在该应用程序中,Net使用Com可视网络包装器连接到VB6代码。此包装器依次使用带有清单的RegFreeCom激活。这个设置为我们工作了两年多。为了减少应用程序启动时间,我们在安装后使用NGen预编译了Net。这需要一分钟的时间来完成。现在我们有了一个新的VB6可执行文件,其中包含了新的dll和新的清单,但是当我们将程序安装到现有的位置时,似乎没有使用新的dll,从而替换了dll的。另一个文件夹的新安装确实使用了新的dll。我检查了两个位置的程序文件夹和新的dll和清单。怎么可能在现有的程序位置没有获得新的dll,而Windows似乎一直在使用以前版本中的预生成代码?
我确实注意到,NGenning在几秒钟内就完成了编译后的图像更新的声明,显然它们并不是最新的。更改dll的版本号不足以触发新映像的创建吗?目前我们不对dll进行数字签名。
发布于 2015-02-21 11:50:09
调用NGen来处理程序集之后,.NET框架将在本机图像缓存中保留一个缓存版本,程序默认尝试加载该版本,而不是您的程序集。因此,用新程序集替换旧程序集不会影响您的程序。
通过调用NGen卸载缓存的版本,程序可以看到您的新程序集,并且一切都开始工作。
更多的技术细节可以在互联网上找到,例如
发布于 2015-02-21 15:33:04
你可能犯的错误太多了,你的问题无助于缩小范围。您可能忘记更新VB6项目中的类型库引用,类型库只支持major.minor版本号,在GAC中可能存在一个副本,可能存在偏离注册表项,您的清单可能根本不被使用,它可能是一个简单的部署oops,您可能增加了错误的程序集属性(如AssemblyFileVersion)。等等。
您需要使用诊断工具来了解实际情况,以便缩小可能的原因:
https://stackoverflow.com/questions/28601445
复制相似问题