Retrieve & lt; Version & gt; тег, написанный в файле csproj из dll [duplicate]

138
задан Peter Mortensen 19 July 2015 в 11:56
поделиться

5 ответов

Два варианта ... независимо от типа приложения, который вы всегда можете вызывать:

Assembly.GetExecutingAssembly().GetName().Version

Если приложение Windows Forms , вы всегда можете получить доступ через приложение, если оно специально предназначено для версия продукта.

Application.ProductVersion

Использование GetExecutingAssembly для ссылки на сборку не всегда является опцией. Таким образом, я лично считаю полезным создавать статический вспомогательный класс в проектах, где мне может понадобиться ссылаться на базовую сборку или версию сборки:

// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
    public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
    public static readonly Version Version = Reference.GetName().Version;
}

Затем я могу чисто ссылаться на CoreAssembly.Version в своем коде как требуется.

244
ответ дан Chris Baxter 24 August 2018 в 23:10
поделиться

Это должно сделать:

Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
5
ответ дан bluish 24 August 2018 в 23:10
поделиться
using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

Замечания из MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :

Метод GetEntryAssembly может вернуть null, когда управляемая сборка была загружена из неуправляемого приложения. Например, если неуправляемое приложение создает экземпляр COM-компонента, написанного на C #, вызов метода GetEntryAssembly из компонента C # возвращает null, поскольку точкой входа для процесса был неуправляемый код, а не управляемая сборка .

17
ответ дан DDA 24 August 2018 в 23:10
поделиться

В MSDN Assembly.GetExecutingAssembly Method является замечанием о методе «getexecutingassembly», что по соображениям производительности вы должны вызвать этот метод только тогда, когда вы не знаете об этом

Рекомендуемый способ получения объекта Assembly, который представляет текущую сборку, заключается в использовании свойства Type.Assembly типа, найденного в сборке.

] Следующий пример иллюстрирует:

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        Console.WriteLine("The version of the currently executing assembly is: {0}",
                          typeof(Example).Assembly.GetName().Version);
    }
}

/* This example produces output similar to the following:
   The version of the currently executing assembly is: 1.1.0.0

Конечно, это очень похоже на ответ со вспомогательным классом «public static class CoreAssembly», но, если вы знаете хотя бы один тип исполняющей сборки, это isn Обязательно создавать класс-помощник, и это экономит ваше время.

32
ответ дан Peter Mortensen 24 August 2018 в 23:10
поделиться

Наконец я остановился на typeof(MyClass).GetTypeInfo().Assembly.GetName().Version для приложения netstandard1.6. Все остальные предложенные ответы представляли собой частичное решение. Это единственное, что доставило мне именно то, что мне было нужно.

Получено из комбинации мест:

https://msdn.microsoft.com/en-us /library/x4cw969y(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/2exyydhb (v = vs.110 ) .aspx

1
ответ дан Victor Ude 24 August 2018 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: