Ответ 1
cshtml/vbhtml динамически компилируется для сборки.
@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
как насчет этого?
Я использую следующий код в нижнем колонтитуле в файле _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, а не только отдельные виды?
cshtml/vbhtml динамически компилируется для сборки.
@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
как насчет этого?
Использование этого помощника работает для меня:
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("");
}
}
Вам нужно получить сборку типа в проекте:
typeof(MyType).Assembly.Whatever
Где MyType
- любой тип в самом проекте MVC (например, контроллер или модель или класс MvcApplication
)
Это работает для меня
@ViewContext.Controller.GetType().Assembly.GetName().Version
Развернувшись на ответе takepara, если вы хотите, чтобы один лайнер получал AssemblyInformationalVersionAttribute из MVC Razor View:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
Вы можете попытаться использовать GetCallingAssembly(). Я не уверен, что это достаточно высоко для стека вызовов или нет, но поскольку Razor на самом деле создает сборку для каждого представления, разумно, что ваше приложение будет вызывающей сборкой для сборки вида.
Моя проблема заключалась в том, что впоследствии я переименовал пространство имен, и я получил ошибку выше.
Проблема заключалась в старой ссылке пространства имен в 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>
Перейдите на главный контроллер и просто скопируйте этот код:
Переименуйте ActionResult
в строку
public string Index()
return typeof(Controller).Assembly.GetName().Version.ToString() ;
run view
Вы можете получить его с помощью свойства Name, как показано ниже:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
это то, что вы ищете?