Проблема с получением AssemblyVersion на веб-странице с помощью Razor / MVC3 - PullRequest
99 голосов
/ 27 мая 2011

Я использую следующий код в нижнем колонтитуле в моем файле _Layout.cshtml, чтобы поместить данные версии AssemblyInfo в нижний колонтитул каждой страницы моего сайта MVC3. Тем не менее:

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()

Просто печатает в нижнем колонтитуле:

Revision 0.0.0.0

Когда я изменил представление, чтобы отобразить всю информацию о сборке для «Выполнение сборки» с использованием следующего

@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()

Что печатает следующее:

Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Это показывает, что «Выполнение сборки» - это не мое основное приложение, а само представление.

Как получить информацию о сборке для приложения ACTUAL, а не только отдельные виды ??

Ответы [ 9 ]

207 голосов
/ 28 мая 2011

cshtml / vbhtml - это динамическая компиляция в сборку.

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version

как насчет этого?

14 голосов
/ 27 мая 2011

Использование этого помощника работает для меня:

    public static HtmlString ApplicationVersion(this HtmlHelper helper)
    {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var version = asm.GetName().Version;
        var product = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyProductAttribute), true).FirstOrDefault() as System.Reflection.AssemblyProductAttribute;

        if (version != null && product != null)
        {
            return new HtmlString(string.Format("<span>{0} v{1}.{2}.{3} ({4})</span>", product.Product, version.Major, version.Minor, version.Build, version.Revision));
        }
        else
        {
            return new HtmlString("");
        }

    }
11 голосов
/ 11 августа 2016

Это работает для меня.Без необходимости явно упоминать тип.

@ViewContext.Controller.GetType().Assembly.GetName().Version
5 голосов
/ 28 мая 2011

Вам необходимо получить сборку вида в проекте:

typeof(MyType).Assembly.Whatever

Где MyType - любой тип в самом проекте MVC (например, контроллер или модель или класс MvcApplication)

4 голосов
/ 22 февраля 2015

Расширяя ответ takepara, если вы хотите, чтобы один вкладыш получил AssemblyInformationalVersionAttribute из MVC Razor View:

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
1 голос
/ 27 мая 2011

Вы можете попробовать использовать GetCallingAssembly (). Я не уверен, достаточно ли это высоко в стеке вызовов или нет, но поскольку Razor фактически создает сборку для каждого представления, очевидно, что ваше приложение будет вызывающей сборкой для сборки представления.

0 голосов
/ 08 декабря 2017

Перейдите в Home Controller и просто скопируйте этот код:

Переименовать ActionResult в строку

public string Index()

   return typeof(Controller).Assembly.GetName().Version.ToString() ;

run view
0 голосов
/ 04 сентября 2017

Моя проблема заключалась в том, что я впоследствии переименовал пространство имен и получил ошибку выше. Проблема была в старой ссылке на пространство имен в Views \ Web.config. Мне пришлось изменить его с Project.WebAPI17 на Company.Project.WebAPI17

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="Company.Project.WebAPI17" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>
0 голосов
/ 27 мая 2011

Вы можете получить его, используя свойство Name, как показано ниже:

  @System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;

это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...