我在正确设置程序集版本然后通过反射获取它时遇到了问题。我找到了一个解决方法,但我仍然很好奇为什么它会这样......
我有一个类库项目,我正在加载它并通过以下代码读取版本:
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 DASM 来比较这两个库。
在 IL DASM 的任何地方,即在主窗口、 list 、元信息中,我都看到我的新库的版本是 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 底层利用了反射,但现在看来是
谢谢大家的回答。
最佳答案
好的,我已经设法解决了。问题出在 Assembly 类的加载方法上。
我使用 Assembly.LoadFrom 并将 DLL 的完整路径作为参数。我已经意识到,当我使用 2.0.0.0 版加载我的库时,Assembly.LoadFrom 正在返回我的第一个库,我已经通过指向库版本 1.0.0.0 而不是 2.0.0.0 的位置的 CodeBase 属性对其进行了验证.
我已将我的加载代码更改为 Assembly.LoadFile,现在它可以正常工作了。
var assembly = Assembly.LoadFile(assemblyName);
关于c# - 设置Assembly Version并通过反射获取它 - 一直是1.0.0.0版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418267/