2009-04-01 6 views
5

j'utilise le post suivant construire des actions dans un projet, de fusionner une lib dans mon application:VS .Net: Post construire pour « Sortie principale de <myProject> » dans le projet d'installation

IF $(ConfigurationName) == Debug GOTO end 
cp $(TargetPath) $(TargetDir)app_unmerged.exe 
del $(TargetPath) 
"C:\Program Files\Microsoft\ILMerge\ilmerge.exe" /internalize $(TargetDir)MyApp_unmerged.exe $(TargetDir)someLib.dll /out:$(TargetDir)myApp.exe 
del $(TargetDir)myApp_unmerged.exe $(TargetDir)someLib.dll 
:end 

Cela fonctionne bien. Maintenant, j'ai un projet d'installation et ajouté le résultat du projet. Je m'attendrais à ce que la "sortie primaire de" soit utilisée, c'est-à-dire l'exe dans/bin/Release. Mais en fait, au lieu de /bin/release/myApp.exe, /obj/release/myApp.exe est utilisé.

Est-ce que quelqu'un sait si je peux changer ce comportement et utiliser la sortie dans/bin/release pour le projet d'installation? Merci.

Répondre

1

Il semble qu'il n'existe pas de solution réelle à ce problème, mais une solution de contournement existe. J'ai créé un ticket sur Microsoft Connect: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=428898

Microsofts anwser:

Salut,

Afin d'exécuter ces après la construction des actions, vous aurez besoin de les mettre dans un fichier de commandes, puis ajoutez approprié au niveau commande pour appeler le fichier de commandes dans la boîte de dialogue d'événement post-construction. Je vois qu'il y a plusieurs instances dans le script avec des références à un certain nombre de variables Visual Studio. Comme nous n'exposons pas ces variables en tant que variables d'environnement, vous devrez les transmettre en tant que paramètres au fichier batch.

J'espère que cela aide!

bonbons Chiang Program Manager - Visual Studio

+0

Ce lien ne semble pas être public ("Le contenu que vous avez demandé ne peut pas être trouvé ou vous n'avez pas l'autorisation de l'afficher."). Puisque le reste d'entre nous ne peut pas le voir, vous devriez le retirer de votre réponse. – mhenry1384

1

J'ai mis les fichiers explicitement, ce qui signifie que, au lieu de dire au projet d'installation d'utiliser du contenu de primers, il a explicitement mis le fichier .exe/.dll. Cela fonctionne plutôt bien, je peux contrôler quel fichier entrerait et les chemins relatifs de l'utilisateur du projet d'installation afin que le projet d'installation puisse être utilisé sur d'autres machines.

+1

Bien que cela fonctionne, cela revient à ne pas pouvoir utiliser différentes configurations de construction, car l'emplacement du fichier est différent pour différentes configurations. En ce moment j'ai une configuration Debug, Release et EvaluationRelease. – phatoni

+0

Je sais, nous installons seulement la version. BTW, la plupart des projets ont passer à Wix3, vous devez travailler plus fort au début, mais vous avez le contrôle sur tout. –

2

Je résous le problème s'appliquent ILMerge dans/dossier obj, ceci est ma configuration des événements post-construction:

COPY $ (ProjectDir) obj \ $ (PlatformName) \ $ (NomConfiguration) \ $ (TargetFileName) $ (TargetDir) temp.exe $ (solutionDir) \ lib \ ilmerge/jokers/t: exe/out: "$ (ProjectDir) obj \ $ (PlatformName) \ $ (ConfigurationName) \ $ (TargetFileName) "" $ (TargetDir) temp.exe "" $ (TargetDir) log4net.dll "" $ (TargetDir) autre.dll " DEL $ (TargetDir) temp.exe

Questions connexes