Pouvez-vous demander à Visual Studio de sortir un nom différent d'un fichier exe en fonction de la définition d'un symbole de compilation conditionnelle spécifique?Modifier le nom de l'exe en fonction du symbole de compilation conditionnel
Répondre
Depuis définissant une condition à la balise assemblyname comme suggéré par Fredrik semble faire de mauvaise humeur Visual Studio, vous pouvez modifier le nom de montage plus tard dans le fichier csproj. L'utilisation du Choose element est un peu comme une instruction if, de sorte qu'un nom peut être ajouté si une condition est remplie, comme indiqué ci-dessous.
Obtenir une sous-chaîne de par exemple DefineConstants
dans un attribut de condition ne semble pas possible (selon MSDN) avec « MSBuild plain vanilla », mais on peut définir leurs propres objectifs de construction et de définir une propriété lors de la compilation avec un /p:Tag=value
(MSBuild command line reference)
...
<Tag>true</Tag>
</PropertyGroup>
<Choose>
<When Condition=" '$(Tag)' == 'true' ">
<PropertyGroup>
<AssemblyName>$(AssemblyName).TagDefined</AssemblyName>
</PropertyGroup>
</When>
</Choose>
<ItemGroup>
...
Si vous chargez le fichier .csproj dans un éditeur de texte, vous pouvez contrôler la propriété AssemblyName
:
<AssemblyName Condition="'$(Configuration)' == 'Debug'">WindowsFormsApplication9.Debug</AssemblyName>
<AssemblyName Condition="'$(Configuration)' != 'Debug'">WindowsFormsApplication9</AssemblyName>
Notez cependant que cela ne change pas seulement le nom du fichier, mais le nom d'assembly, qui pourrait signifier des ennuis si vous avez un autre code référençant l'assemblée.
Je n'ai jamais fait cela moi-même, donc je ne peux pas vraiment dire à quel point l'idée est bonne ou mauvaise.
Vous pouvez modifier le fichier csproj, qui est juste un fichier MSBuild qui contient « tâches ». Il y a une section dans le fichier csproj qui s'appelle 'AfterBuild'. Peut-être, vous pouvez ajouter une commande qui renomme votre fichier exe au nom de fichier de votre choix.
(Bien sûr, vous devrez décommenter cette section).
Peut-être quelque chose comme ceci:
<Target Name="AfterBuild">
<Copy SourceFiles="" DestinationFiles="" Condition="" />
<Delete Files="" Condition="" />
</Target>
Je n'ai pas travaillé dehors plus loin, mais vous devez remplir l'attribut Condition, de sorte que vous pouvez vérifier si le symbole conditionnel est défini ou non.
N'a pas essayé, mais cela écrasera malheureusement une compilation existante. * Peut-être que je pourrais entrer un BeforeBuild et copier l'application existante si elle existe *. Comment entrer la condition si j'ai un symbole conditionnel personnalisé entré dans la balise 'DefineConstants' dans le fichier csproj? – Patrick
Cela ne fonctionne pas pour moi. – Elmue
Aucune des réponses travaille ici pour moi.
Ils produisent des erreurs ou ne font rien.
Voici ma solution qui fonctionne dans VS2005 et je suppose que ce sera également travailler dans les nouvelles versions VS. Modifiez le fichier * .csproj comme ceci:
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
if $(PlatformTarget) == x86 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_32.exe"
if $(PlatformTarget) == x64 move /y "$(TargetPath)" "$(TargetDir)$(ProjectName)_64.exe"
</PostBuildEvent>
</PropertyGroup>
Le résultat sera qu'une compilation 32 bits produit un fichier ProjectName_32.exe
et une version 64 bits produit ProjectName_64.exe
.
Veuillez noter la syntaxe étrange. Il ne doit pas y avoir de parenthèse autour de la condition if
et le x86
ne doit pas être entre guillemets.
L'inconvénient de cette méthode est que vous ne pouvez pas démarrer votre Exe dans le débogueur plus parce que Visual Studio ne trouve pas le Exe qu'il a généré.Cela pourrait être résolu en remplaçant la commande 'move' par la commande 'copy' mais dans ce cas vous devrez copier l'Exe dans un autre répertoire car vous ne voulez sûrement pas avoir deux fois le même fichier dans le même répertoire.
Tout cela est en désordre. Il est vraiment incroyable que vous puissiez entrer dans le répertoire de sortie directement dans les paramètres du projet, mais pour faire quelque chose de vraiment basique en changeant le nom d'Exe, vous devez écrire un tel script maladroit qui a des effets secondaires laids. Honte à Microsoft!
- 1. Configuration du symbole de compilation conditionnelle dans le fichier app.config
- 2. Liferay: Inclure conditionnel en fonction du langage
- 3. Modifier le nom du processus en C#?
- 4. Modifier le nom du fichier gmon.out lors de la compilation avec -pg
- 5. FrameworkElements conditionnel en fonction de DataContext
- 6. Erreur de compilation en utilisant l'opérateur conditionnel C#
- 7. symbole de compilation pour détecter cadre compact?
- 8. programme de compilation de fonction cutil
- 9. D: nom du paramètre de fonction introspection
- 10. Actionscript 3: Comment puis-je obtenir le nom du symbole, et non le nom de l'instance
- 11. Script pour modifier l'en-tête de la page Web en fonction du nom de domaine
- 12. Impossible de modifier le nom du cookie de session php.
- 13. Modifier les propriétés de l'exécutable (nom du produit) avec C#
- 14. Modifier le nom de connexion
- 15. Modifier le nom du lien HREF
- 16. Tentative de compilation de l'addon MobileSubstrate - Symbole non défini
- 17. Modifier le nom du fichier de téléchargement dans Cocoahttpserver
- 18. Modifier dynamiquement le nom du dossier de téléchargement Flajaxian
- 19. Modifier le nom de noeud de l'élément?
- 20. Nombre de noeuds rencontrant un conditionnel en fonction des attributs
- 21. modifier le nom de la première option
- 22. javascript - Modifier l'action du formulaire en fonction de la sélection?
- 23. Modifier l'enregistrement du nom de fichier mais du client
- 24. Comment modifier le nom d'hôte en C#?
- 25. ANT - javac compilation en raison de l'échec ne peut pas trouver le symbole
- 26. Modifier la chaîne de connexion app.config en fonction du PC
- 27. Modifier le corps du texte des objets de fonction existants
- 28. Le symbole global requiert un nom de package explicite.
- 29. Symbole '#' dans le nom d'attribut XML produses DOMException
- 30. obtenir l'adresse de fonction du nom [.debug_info ??]
Comment puis-je entrer une condition pour mon propre symbole, comme 'NO_LOG' ou quelque chose au lieu d'une sélection de configuration? – Patrick
@Patrick: mes compétences msbuild ne s'étendent pas aussi loin. Ces constantes vont dans la propriété 'DefineConstants', mais toutes vont dans la même valeur de propriété (' CONST1 = value; CONST2; CONST3') et malheureusement, il ne semble pas y avoir d'outil "contains" qui peut être utilisé dans Attributs 'Condition'. –
Vérifiez ce fil: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/827eb72a-65fb-426c-862c-6095f71bd4bc –