设置程序集版本并通过反射得到它 - 始终版本1.0.0.0?

时间:2013-05-07 11:49:01

标签: c# .net reflection .net-assembly

我在设置正确的Assembly版本然后通过反射获取它时遇到了问题。我找到了一个解决方法,但我仍然很好奇它为什么会这样......

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

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"

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

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显示正确的版本而反射不是?我一直认为引擎盖下的IL DASM利用了反射,但现在在我看来似乎是

感谢您的所有答案。

1 个答案:

答案 0 :(得分:-1)

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

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

我已将加载代码更改为Assembly.LoadFile,现在它正常工作。

var assembly = Assembly.LoadFile(assemblyName);
相关问题