web-dev-qa-db-fra.com

Problème lors de l'insertion de la version d'assemblage dans une page Web à l'aide de Razor/MVC3

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?

97
Jay Stevens

cshtml/vbhtml est une compilation dynamique pour Assembly. 

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

que dis-tu de ça?

200
takepara

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

    }
14
Jay

Cela fonctionne pour moi. Sans avoir besoin de mentionner explicitement le type.

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

Vous devez obtenir l’assemblage d’un type dans le projet:

typeof(MyType).Assembly.Whatever

MyType est un type quelconque du projet MVC lui-même (par exemple, un contrôleur, un modèle ou la classe MvcApplication

5
SLaks

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
4
jslatts

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.

1
BAKeele

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>
0
florian.isopp

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
0
prashant