设置程序集版本并通过反射获得它-所有时间版本1.0.0.0

本文关键字:版本 -所 时间 程序集 反射 设置 | 更新日期: 2023-09-27 18:12:30

我有一个问题,正确设置程序集版本,然后通过反射获得它。我找到了一个解决方案,但我仍然很好奇为什么它的行为是这样的…

我有一个类库项目,我正在加载它并通过以下代码读取版本:

var assembly = Assembly.LoadFrom(assemblyName);
var version= assembly.GetName().Version;

我得到了一个好结果:

assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version  "1.0.0.0"

但是现在我已经在类库项目中将汇编版本和文件版本字段更改为2.0.0.0的值。我已经编译了它,并运行了IL asm来比较两个库。

在IL DASM的任何地方,即在主窗口,在Manifest中,在Metainfo中,我已经看到我的新库有2.0.0.0版本,以前的库有1.0.0.0,所以我很高兴一切都是正确的。

但后来我回到我的应用程序,我已经加载了2.0.0.0版本的程序集,这是结果:

assembly {AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null}
version  "1.0.0.0"

所以反射不会返回给我好的版本值。解决方法是使用FileVersionInfo类:

FileVersionInfo.GetVersionInfo(assemblyName).FileVersion;

现在我得到了正确的结果。

我的问题是:我还需要在我的类库项目中改变什么才能通过反射机制检索一个好的版本?为什么IL DASM显示正确的版本,而反射不是?我一直认为我在引擎盖下的DASM利用了反射,但现在我觉得它似乎是

谢谢大家的回答。

设置程序集版本并通过反射获得它-所有时间版本1.0.0.0

好的,我已经设法解决了。问题出在Assembly类的加载方法上。

我正在使用程序集。使用到DLL的完整路径作为参数。我已经意识到,当我加载2.0.0.0版本的程序集库时。LoadFrom返回了我的第一个库,我已经通过CodeBase属性验证了它,该属性指向库版本1.0.0.0的位置,而不是2.0.0.0。

我已经改变了我的加载代码汇编。加载文件,现在工作正常。

var assembly = Assembly.LoadFile(assemblyName);