Определите ссылочную версию файла dll в С#

У меня есть решение С#, которое ссылается на DLL, созданную мной из другого решения С#.

Достаточно легко определить версию моего решения с помощью Application.ProductVersion. Однако то, что мне действительно нужно, это способ определения файловой версии exe и dll отдельно в моей программе. Я хочу отобразить версии dll и exe в диалоговом окне About. Как выглядит код для этого?

Ответ 1

Самый простой способ - узнать тип ссылочной сборки:

AssemblyName name = typeof(MyCompany.MyLibrary.SomeType).Assembly.GetName();

Assembly.GetName возвращает AssemblyName, который имеет свойство Version, указывающее версию сборки.

В качестве альтернативы вы можете получить имена сборок всех сборок, на которые ссылается исполняющая сборка (то есть .exe):

AssemblyName[] names = Assembly.GetExecutingAssembly().GetReferencedAssemblies();

Ответ 2

Возможно, самым простым решением является следующее:

var version = Assembly.GetAssembly(typeof(SomeType)).GetName().Version;

где SomeType - это тип, который вы точно знаете, который определен в этой конкретной сборке. Затем вы можете вызвать .ToString() в этом объекте версии или посмотреть его свойства.

Конечно, это взорвется в огромном огненном шаре в тот момент, когда вы переместите свой тип в другую сборку. Если это возможно, вам понадобится более надежный способ найти объект сборки. Дайте мне знать, если это так.

Ответ 3

AssemblyInfo класс имеет всю эту информацию, поэтому вам просто нужно получить ссылку на сборки в вашем коде. Например:

Assembly.GetExecutingAssembly.GetName.Version.ToString()

Вы можете получить другие сборки в проекте различными способами, например

var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies();