在引用的项目中获取主项目的版本

Posted

技术标签:

【中文标题】在引用的项目中获取主项目的版本【英文标题】:Get main project's version in a referenced project 【发布时间】:2021-12-16 04:18:48 【问题描述】:

我有一个Main 项目,它引用了一个项目Sub,这是一个类库。 在 Sub 中,我有一个自定义 UI 控件,用于显示我的应用程序的版本。 此控件在我的应用程序中的多个位置使用。不仅是Main 项目。 我的应用程序版本是 AssemblyInfo 文件中 Main 项目的版本。

我正在寻找在Sub 项目中获取Main 项目版本的方法。 我发现我在 UserControl 中运行的这一行:

var mainVersion = AssemblyName.GetAssemblyName("ThePathToMain.exe").Version;

这会给我Main 项目的版本,这是我想要的。

问题 还有其他方法吗? 或者有没有办法避免Main项目可执行文件的硬编码字符串?

我的 Main 项目中不能有 UserControl,因为它在我的解决方案中的其他项目中使用。 将Main 项目作为Sub 项目中的引用将导致循环引用并且不起作用。

【问题讨论】:

你可以使用Assembly.GetEntryAssembly().GetName(),假设你的主项目是可执行的并且没有被另一个项目使用。 如果你有winforms项目,也可以使用Application.ProductVersion 【参考方案1】:

感谢@Evk,我找到了这个解决方案:

var name = Assembly.GetEntryAssembly().GetName();
var parts = name.CodeBase.Split('/');
var executable = parts.Last();
var version = AssemblyName.GetAssemblyName(executable).Version; 

【讨论】:

你为什么这样做而不是像@Evk 所建议的那样?您的变量 name 已经有您要查找的版本。

以上是关于在引用的项目中获取主项目的版本的主要内容,如果未能解决你的问题,请参考以下文章

怎样使用Android Studio引用本地aar文件

android 库项目中的方法引用过多 - ClassNotFoundException

Gradle配置全局变量

将 Web 应用程序分成多个项目

将项目从bitbucket导入到本地maven存储库

如何在 sbt 子项目 build.sbt 文件中获取对当前项目的引用