Reputation: 5913
I'm using the following code in a footer in my _Layout.cshtml file to put the AssemblyInfo version data into the footer of every page in my MVC3 site. However:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
Just prints in the footer:
Revision 0.0.0.0
When I modified the view to display all of the assembly info for the "Executing Assembly" using the following
@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
Which prints the following:
Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
This shows that the "Executing Assembly" isn't my main app, it's the view itself.
How do I get the assembly information for the ACTUAL app, not just the individual views??
Upvotes: 112
Views: 47382
Reputation: 887453
You need to get the assembly of a type in the project:
typeof(MyType).Assembly.Whatever
Where MyType
is any type in the MVC project itself (eg, a controller or model, or the MvcApplication
class)
<p>Assembly Version: @typeof(EdiServer.Controllers.HomeController).Assembly.GetName().Version.ToString();</p>
Upvotes: 7
Reputation: 3765
for an api controller I used this based of other answers
Version = GetType().Assembly.GetName().Version.ToString()
Upvotes: 1
Reputation: 941
This works for me. Without needing to explicitly mention the type.
@ViewContext.Controller.GetType().Assembly.GetName().Version
Upvotes: 22
Reputation: 1
GO to Home Controller and just copy this code :
Rename ActionResult
to String
public string Index()
return typeof(Controller).Assembly.GetName().Version.ToString() ;
run view
Upvotes: -1
Reputation: 862
My problem was that I had renamed the namespace afterwards and I got the error above.
The problem was the old namespace reference in the Views\Web.config . I had to change it from Project.WebAPI17
to 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>
Upvotes: 0
Reputation: 9347
Expanding on takepara's answer, if you want a one liner to get the AssemblyInformationalVersionAttribute from a MVC Razor View:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
Upvotes: 4
Reputation: 10433
cshtml/vbhtml is dynamic compile to assembly.
@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
how about this?
Upvotes: 228
Reputation: 2386
You can get it using Name property as below:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
is that what you are looking for?
Upvotes: -2
Reputation: 6294
Using this helper works for me:
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("");
}
}
Upvotes: 17
Reputation: 307
You could try to use the GetCallingAssembly(). I'm not sure if that is high enough up the call stack or not, but since Razor actually creates an assembly for each view, it stands to reason that your app would be the calling assembly for the view assembly.
Upvotes: 0