111 votes

Problème pour obtenir l'AssemblyVersion dans une page web en utilisant Razor /MVC3

J'utilise le code suivant dans un pied de page de mon fichier _Layout.cshtml pour placer les données de la version de AssemblyInfo dans le pied de page de chaque page de mon site MVC3. Cependant :

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()

Il suffit d'imprimer dans le pied de page :

Revision 0.0.0.0

Lorsque j'ai modifié la vue pour afficher toutes les informations sur l'assemblage pour l'"Assemblée en cours d'exécution" en utilisant ce qui suit

@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()

Qui imprime les éléments suivants :

Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

Cela montre que l'"Executing Assembly" n'est pas mon application principale, c'est la vue elle-même.

Comment puis-je obtenir les informations d'assemblage pour l'application RÉELLE, et pas seulement les vues individuelles ?

227voto

takepara Points 5965

Cshtml/vbhtml est une compilation dynamique vers l'assemblage.

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

Que pensez-vous de ça ?

15 votes

Et @GetType(YourApplicationNamespace.MvcApplication).Assembly.G‌​etName.Version pour tous les VB.NETers. Tous les deux.

0 votes

Je dois également partager mes louanges - ce sommet de mon histoire "montrer le numéro de révision dans l'application pour l'assurance qualité" avec [assembly : AssemblyVersion("1.0.*")], j'obtiens un numéro de build agréable à regarder. Cela fonctionne très bien.

5 votes

Pour les sites WebAPI : @typeof(YourDefaultNamespace.WebApiApplication).Assembly.Get‌​Name().Version . Il peut même fonctionner sans l'espace de nom par défaut : @typeof(WebApiApplication).Assembly.GetName().Version

16voto

Jay Points 4474

L'utilisation de cette aide 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("");
        }

    }

5voto

SLaks Points 391154

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

typeof(MyType).Assembly.Whatever

MyType est n'importe quel type dans le projet MVC lui-même (par exemple, un contrôleur ou un modèle, ou encore l'objet MvcApplication classe)

0 votes

Cette réponse est en fait meilleure que la réponse acceptée, car elle indique clairement que vous recherchez un type qui fait partie de l'assemblage de votre application. Cela explique mieux la cause du problème.

0voto

BAKeele Points 261

Vous pouvez essayer d'utiliser la fonction GetCallingAssembly(). Je ne suis pas sûr que ce soit assez haut dans la pile d'appels, mais comme Razor crée une assembly pour chaque vue, il est logique que votre application soit l'assembly appelant l'assembly de la vue.

0 votes

L'assemblage d'appel va juste un niveau plus haut dans l'arbre... toujours pas bon.

-2voto

matmat Points 907

Vous pouvez l'obtenir en utilisant la propriété Name comme ci-dessous :

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

C'est ce que vous recherchez ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X