8
votes

Quelle est la bonne façon d'obtenir le nom de mon application WinForms?

Je pourrais faire ce xxx pré>

ou p>

return Path.GetFileNameWithoutExtension(Application.ExecutablePath);


2 commentaires

Difficile de deviner ce que vous entendez par "nom de l'application", le contexte compte. Les deux renvoient le nom du fichier EXE . Même chose que le nom du processus.


@Hanspassant Oh, je veux dire le nom principal de mon produit. Par exemple, pour MS Word, c'est "Microsoft Word" et non "Winwork". Dans mon cas, ce nom que je n'ai pas codé dans les propriétés de l'application en tant que nom de montage. Quelle serait l'approche de l'obtenir?


3 Réponses :


1
votes

Cela dépend de la manière dont vous définissez le «nom de l'application».

application.executablePath renvoie le chemin d'accès du fichier exécutable qui a démarré l'application, y compris le nom exécutable, cela signifie que si une personne renomme le fichier change de valeur.

< Code> Assembly.Bettentrytambily (). GetName (). Nom renvoie le nom simple de l'assemblage. Ceci est généralement, mais pas nécessairement, le nom de fichier du fichier manifeste de l'Assemblée, moins son extension

donc, le nom getname (). Le nom semble plus affitable.

Pour le plus rapide, je ne sais pas. Je présume que exécutablePath est plus rapide que GetName () car dans l'obtention () nécessite une réflexion, mais cela doit être mesuré.

EDIT:

Essayez de Construire cette application de console, exécutez-le puis essayez de renommer le nom du fichier exécutable à l'aide de l'Explorateur de fichiers Windows, exécuté directement avec le double clic sur l'exécutable renommé.
L'exécutablePath reflète la modification, le nom de l'assemblage est toujours le même xxx


1 commentaires

Savez-vous dans quel scénario ils diffèrent? Nom exécutable (à partir de exécutablePath ) semble être exactement le nom de l'assembly.



11
votes

4
votes

Selon ce que vous envisagez d'être le nom de l'application , il y a même une troisième option: Obtenez le titre de montage ou le nom du produit (ceux-ci sont généralement déclarés dans AssemblyInfo.cs ): xxx

ou: xxx


5 commentaires

Pourquoi titleattributes [0] est l'AssembléeTiTleatTribute vérifiant ici? Nous avons déjà interrogé la même chose?


@nawfal: Oui, vous avez raison, il est fortement improbable que les éléments de la matrice soient d'un autre type, mais certains outils d'analyse de code statique (comme Resharper) marqueront ce code comme un potentiel NullReferenceException Menace car obj comme t expression évaluera à null si obj n'est pas t . En écrivant obj is t avant obj comme t , ces outils sauront au moment de la compilation qu'aucune exception ne sera lancée.


Oui je comprends ça. Bien que j'ai certainement employé votre code pour obtenir le titre de la demande, je pense que l'application.Productname était la plus courte et la plus facile à la question.


@nawfal: Oui, vous avez fait la bonne chose, application.productname est un bon choix pour une application WinForms. Querifier les attributs peut aider si l'application n'est pas des formulaires Windows. Pour être complètement précis, la mise en oeuvre interne de Application.Productname récupère le AssemblyProDucTatribute la valeur et le cache le cache.


Application.Produits et application.Productsersion s'applique à NET CORE 3.1 . Et assembly et messagebox.show ?