2012-08-15 68 views
1

我们有大约30个项目的大型解决方案。我们还有一些通用代码实用程序,作为该实用程序类的一部分,我们包含一个GetAssemblyVersionInfo方法,该方法返回该程序集的版本信息。但是,我们希望获得项目的程序集的程序集版本信息而不是实用程序DLL。有什么办法让一个实用工具函数返回基于执行的另一个程序集的版本信息,而不是传递文件名?获取组件版本信息

编辑:

对于那些谁是好奇,我解决它使用:

System.Reflection.Assembly.GetCallingAssembly().GetName().Version 
+0

但是,如果您在项目中调用该行,它将返回项目程序集的'版本'。不是吗?问题在哪里呢? – Tigran 2012-08-15 16:55:16

+0

没错,但我想我以前发布的方式失败了,因为如果我从一层深度调用效用函数会发生什么?它会返回另一个实用程序DLL的程序集信息,但我想要的是启动该过程的整个应用程序。 – keelerjr12 2012-08-15 17:02:40

+1

注意:考虑明确地指定汇编作为你的'GetAssemblyVersionInfo'方法的参数 - 这将使代码更清洁,更具可读性,并允许你以更有意义的方式测试它。 – 2012-08-15 17:06:51

回答

0

我认为你应该使用GetEntryAssembly(),而不是GetCallingAssembly()

+1

每次我打电话给我时,都会得到一个NullReferenceException。有任何想法吗? – keelerjr12 2012-08-15 17:01:12

+0

当条目组件不受管理时,'GetEntryAssembly'返回null。请注意,mstest框架的入口程序集也是非托管的,因此当您在测试中运行它时,它始终为空。 – 2012-08-15 17:30:27

1

如果您有程序集名称,则可以将其动态加载到当前AppDomain中以检索版本信息。

Assembly.LoadFrom(string.Format("{0}.dll", "assemblyshortname")).GetName().Version