ASP.NET MVC: как получить информацию о сборке из экземпляра HtmlHelper? - PullRequest
11 голосов
/ 28 февраля 2012

У меня есть метод расширения HtmlHelper в сборке, отдельной от моей сборки приложения MVC. В рамках метода расширения я хотел бы получить номер версии сборки приложения MVC. Возможно ли это?

Вызывающая сборка - это динамическая сборка вида бритвы, так что это не помогает. Есть ли какой-нибудь объект, вложенный в HtmlHelper, который может предоставить мне номер версии сборки приложения MVC? Я изучал документацию по классу HtmlHelper , но до сих пор не нашел решения моей проблемы.

Спасибо!

Ответы [ 3 ]

17 голосов
/ 28 февраля 2012

Это печально известная вещь, потому что, к сожалению, нет единого надежного способа сделать это.

Однако, поскольку это приложение MVC, есть вероятность, что у него есть Global.asax.cs, поэтомуон имеет локально определенный HttpApplication класс.

Из html-помощника вы можете получить следующее:

public static string AppVersion(this HtmlHelper html)
{
  var appInstance = html.ViewContext.HttpContext.ApplicationInstance;
  //given that you should then be able to do 
  var assemblyVersion = appInstance.GetType().BaseType.Assembly.GetName().Version;
  //note the use of the BaseType - see note below
  return assemblyVersion.ToString();
}

Примечание

Вы можете удивиться, почему код используетBaseType экземпляра приложения, а не просто тип.Это потому, что файл Global.asax.cs является основным типом приложения MVC, но затем Asp.Net динамически компилирует другой тип HttpApplication, который наследуется от него через Global.asax.

Как я уже говорил ранее;это работает на большинстве сайтов MVC, потому что все они должны иметь класс приложения, определенный в файле Global.asax.cs по соглашению (потому что так настроен проект).

5 голосов
/ 17 июня 2015

На тот случай, если кто-нибудь столкнется с этим, вот что у меня сработало (MVC5 VS2013).Введите прямо в вид:

@ViewContext.HttpContext.ApplicationInstance.GetType().BaseType.Assembly.GetName().Version.ToString();
1 голос
/ 21 февраля 2013

Просто найдите сборку, которая должна быть источником вашего номера версии

AppDomain.CurrentDomain.GetAssemblies().Where(a => a.GetName().Name.Equals("MyDll")).First().GetName().Version.ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...