J'utilise le code suivant dans un pied de page de mon fichier _Layout.cshtml pour placer les données de version de AssemblyInfo dans le pied de page de chaque page de mon site MVC3. Toutefois:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
Juste des impressions dans le pied de page:
Revision 0.0.0.0
Lorsque j'ai modifié la vue pour afficher toutes les informations sur l'assemblage de "l'exécution de l'assemblage" à l'aide de l'option suivante
@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
Qui imprime ce qui suit:
Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Cela montre que "l'exécution de l'Assemblée" n'est pas mon application principale, c'est la vue elle-même.
Comment puis-je obtenir les informations de l'Assemblée pour l'application ACTUAL, et pas seulement les vues individuelles?
cshtml/vbhtml est une compilation dynamique pour Assembly.
@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
que dis-tu de ça?
Utiliser cet assistant fonctionne pour moi:
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("");
}
}
Cela fonctionne pour moi. Sans avoir besoin de mentionner explicitement le type.
@ViewContext.Controller.GetType().Assembly.GetName().Version
Vous devez obtenir l’assemblage d’un type dans le projet:
typeof(MyType).Assembly.Whatever
Où MyType
est un type quelconque du projet MVC lui-même (par exemple, un contrôleur, un modèle ou la classe MvcApplication
En développant la réponse de takepara, si vous voulez une ligne unique pour obtenir l'assembly AssemblyInformationalVersionAttribute à partir d'une vue de rasoir MVC:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
Vous pouvez essayer d'utiliser GetCallingAssembly (). Je ne sais pas si cela est assez élevé dans la pile d'appels ou non, mais comme Razor crée réellement une assemblée pour chaque vue, il va de soi que votre application serait l'assemblée appelée pour l'assemblage de la vue.
Mon problème était que j'avais renommé l'espace de noms par la suite et que le message d'erreur ci-dessus m'avait été renvoyé . Je devais le changer de 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>
Allez sur Home Controller et copiez simplement ce code:
Renommez ActionResult
en String
public string Index()
return typeof(Controller).Assembly.GetName().Version.ToString() ;
run view