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

Я использую следующий код в нижнем колонтитуле в файле _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, а не только отдельные виды?

Ответ 1

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

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

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

Ответ 2

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

    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("");
        }

    }

Ответ 3

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

typeof(MyType).Assembly.Whatever

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

Ответ 4

Это работает для меня

@ViewContext.Controller.GetType().Assembly.GetName().Version

Ответ 5

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

@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion

Ответ 6

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

Ответ 7

Моя проблема заключалась в том, что впоследствии я переименовал пространство имен, и я получил ошибку выше. Проблема заключалась в старой ссылке пространства имен в 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>

Ответ 8

Перейдите на главный контроллер и просто скопируйте этот код:

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

public string Index()

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

run view

Ответ 9

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

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

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