首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新dll不用于使用NGen预编译的代码

新dll不用于使用NGen预编译的代码
EN

Stack Overflow用户
提问于 2015-02-19 08:19:02
回答 2查看 654关注 0票数 1

我们有一个VB6/Net混合应用程序,在该应用程序中,Net使用Com可视网络包装器连接到VB6代码。此包装器依次使用带有清单的RegFreeCom激活。这个设置为我们工作了两年多。为了减少应用程序启动时间,我们在安装后使用NGen预编译了Net。这需要一分钟的时间来完成。现在我们有了一个新的VB6可执行文件,其中包含了新的dll和新的清单,但是当我们将程序安装到现有的位置时,似乎没有使用新的dll,从而替换了dll的。另一个文件夹的新安装确实使用了新的dll。我检查了两个位置的程序文件夹和新的dll和清单。怎么可能在现有的程序位置没有获得新的dll,而Windows似乎一直在使用以前版本中的预生成代码?

我确实注意到,NGenning在几秒钟内就完成了编译后的图像更新的声明,显然它们并不是最新的。更改dll的版本号不足以触发新映像的创建吗?目前我们不对dll进行数字签名。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-21 11:50:09

调用NGen来处理程序集之后,.NET框架将在本机图像缓存中保留一个缓存版本,程序默认尝试加载该版本,而不是您的程序集。因此,用新程序集替换旧程序集不会影响您的程序。

通过调用NGen卸载缓存的版本,程序可以看到您的新程序集,并且一切都开始工作。

更多的技术细节可以在互联网上找到,例如

https://blogs.msdn.microsoft.com/clrcodegeneration/2010/04/27/ngen-getting-started-with-ngen-in-visual-studio/

票数 1
EN

Stack Overflow用户

发布于 2015-02-21 15:33:04

你可能犯的错误太多了,你的问题无助于缩小范围。您可能忘记更新VB6项目中的类型库引用,类型库只支持major.minor版本号,在GAC中可能存在一个副本,可能存在偏离注册表项,您的清单可能根本不被使用,它可能是一个简单的部署oops,您可能增加了错误的程序集属性(如AssemblyFileVersion)。等等。

您需要使用诊断工具来了解实际情况,以便缩小可能的原因:

  • sxstrace.exe实用程序显示了清单是如何被解析的。
  • fuslogvw.exe实用工具向您展示了程序集的位置。将其配置为记录本例中的所有绑定,因为没有绑定失败。
  • 同样,使用fuslogvw.exe,您可以看到它绑定了本地映像。在“日志类别”组框中选择“本机图像”单选按钮。
  • SysInternals的过程监视器实用程序是诊断注册表和文件系统故障的首选武器。您将看到VB6应用程序是如何读取键和定位文件的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28601445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档