为什么当从另一个应用程序域加载、替换.NET DLL (DLL用新版本更新),然后重新加载(使用Assembly.LoadFrom)时,版本信息仍然反映旧版本?
在assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false)或assembly.GetCustomAttributes(typeof(AssemblyVersionAttribute), false)中也观察到了同样的情况。
这是正常行为吗?如果我在资源管理器中检查该文件,我会看到正确的版本。
有没有办法获得DLL的实际版本?
发布于 2012-08-22 23:48:15
这不是很清楚,但术语“重新加载”是一个强有力的指标,你看到了什么。CLR将不允许使用Assembly.LoadFrom()重新加载同一程序集的不同版本。这是一个强大的DLL地狱措施,并避免了许多令人讨厌的运行时异常。特别是说“不能将Foo转换成Foo”InvalidCastExceptions。.NET中的类型标识包括程序集的AssemblyVersion。调用Assembly.LoadFrom()将只返回对先前加载的程序集的引用。
也没有从AppDomain卸载程序集的方法。您唯一能做的就是创建一个新的AppDomain。
我不应该提到Assembly.LoadFile(),它不执行这个检查,这是个大问题。
发布于 2012-08-22 23:40:55
将程序集加载到AppDomain中时,不能将其卸载。因此,替换文件并在已经加载了程序集的AppDomain中重新加载它根本不起作用(这是在设计上)。您需要一个新的AppDomain来加载替换的部件。
https://stackoverflow.com/questions/12076167
复制相似问题