Информация о версии основного приложения DNX

В более ранних приложениях на основе .NET я реализовал центральный метод для возврата информации о приложении, обычно названия продукта, версии и законных авторских прав. Этот метод был реализован через System.Reflection.Assembly или в более новых приложениях через System.Diagnostics.FileVersionInfo. Это позволило мне хранить номер версии в центральном месте, а именно в основном файле сборки, и легко редактировать его в свойствах проекта Visual Studio.

Сейчас в ядре DNX всего этого как бы нет, ни System.Reflection, ни System.Diagnostics.

Как бы вы предложили управлять информацией о версии в приложении ASP.NET 5 на базе ядра DNX нейтральным для платформы способом?


person NicolasR    schedule 21.08.2015    source источник
comment
Файл project.json имеет номер версии, имя, описание, авторские права, авторов и т. д. Это те же свойства, которые используются для сборки пакета NuGet. Я считаю, что вы можете прочитать этот файл, используя Configuration.GetConfigurationSection.   -  person Muhammad Rehan Saeed    schedule 21.08.2015
comment
Звучит здорово. Я надеялся, что уже есть стандартный способ, но в любом случае он кажется простым и интуитивно понятным. Не могли бы вы опубликовать это как ответ, чтобы я мог его принять?   -  person NicolasR    schedule 21.08.2015


Ответы (2)


Файл project.json имеет номер версии, имя, описание, авторские права, авторов и т. д. Это те же свойства, которые используются для сборки пакета NuGet. На самом деле, если вы создаете проект «Библиотека классов (пакет)», вы можете скомпилировать его непосредственно в файл NuGet .nupkg, отметив параметр в свойствах проекта.

Я считаю, что вы можете прочитать этот файл, используя Configuration.GetConfigurationSection. ApplicationSettings — это просто класс со свойствами из project.json, которые вы хотите прочитать.

var configurationSection = configuration.GetConfigurationSection(nameof(ApplicationSettings));
var applicationSettings = ConfigurationBinder.Bind<ApplicationSettings>(configurationSection);
person Muhammad Rehan Saeed    schedule 21.08.2015
comment
Мой project.json содержит только номер версии вверху, без авторских прав, автора, названия продукта и т. д. В любом случае, я смог сделать то, что вы предлагаете, с моим файлом config.json, где я сам добавил всю информацию о версии. - person NicolasR; 21.08.2015
comment
Вы можете добавить эти свойства. Их там нет по умолчанию. Вы должны получить интеллектуальное представление для них, но вам нужно использовать бета-версию 6 и выше, я думаю. - person Muhammad Rehan Saeed; 21.08.2015

Вы можете реализовать что-то вроде IRuntimeEnvironment dnx:

Сейчас в ядре DNX всего этого как бы нет, ни System.Reflection, ни System.Diagnostics.

Не знаю, что вы имеете в виду. System.Reflection и System.Diagnostics доступны: https://github.com/aspnet/dnx/blob/219871c6063d00f8297eeafe93266f1048f59a45/src/Microsoft.Dnx.Host/project.json#L21-L23

Если вы не можете найти определенный тип, используйте веб-сайт PackageSearch, чтобы узнать, в каком пакете NuGet он находится.

person Victor Hurdugaci    schedule 21.08.2015
comment
Отлично, это тоже работает. Мне было неясно, что такое System.Reflection и System.Diagnostics. В старом коде я использовал, например, System.Reflection.Assembly.GetExecutingAssembly. Для этого Intellisense говорит мне, что он недоступен в основной среде CLR. - person NicolasR; 22.08.2015
comment
Правильно, GetExecutingAssembly недоступен в CoreCLR - person Victor Hurdugaci; 22.08.2015