首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileVersionInfo.GetVersionInfo显示被替换文件的版本错误

FileVersionInfo.GetVersionInfo显示被替换文件的版本错误
EN

Stack Overflow用户
提问于 2012-08-22 23:10:00
回答 2查看 441关注 0票数 1

为什么当从另一个应用程序域加载、替换.NET DLL (DLL用新版本更新),然后重新加载(使用Assembly.LoadFrom)时,版本信息仍然反映旧版本?

assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false)assembly.GetCustomAttributes(typeof(AssemblyVersionAttribute), false)中也观察到了同样的情况。

这是正常行为吗?如果我在资源管理器中检查该文件,我会看到正确的版本。

有没有办法获得DLL的实际版本?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 23:48:15

这不是很清楚,但术语“重新加载”是一个强有力的指标,你看到了什么。CLR将不允许使用Assembly.LoadFrom()重新加载同一程序集的不同版本。这是一个强大的DLL地狱措施,并避免了许多令人讨厌的运行时异常。特别是说“不能将Foo转换成Foo”InvalidCastExceptions。.NET中的类型标识包括程序集的AssemblyVersion。调用Assembly.LoadFrom()将只返回对先前加载的程序集的引用。

也没有从AppDomain卸载程序集的方法。您唯一能做的就是创建一个新的AppDomain。

我不应该提到Assembly.LoadFile(),它不执行这个检查,这是个大问题。

票数 3
EN

Stack Overflow用户

发布于 2012-08-22 23:40:55

将程序集加载到AppDomain中时,不能将其卸载。因此,替换文件并在已经加载了程序集的AppDomain中重新加载它根本不起作用(这是在设计上)。您需要一个新的AppDomain来加载替换的部件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12076167

复制
相关文章

相似问题

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