2009-04-01 3 views
5

ich folgenden Beitrag bauen Aktionen in einem Projekt bin mit einer lib in meine Anwendung zu fusionieren:VS .Net Post baut Ereignisse für „Primary Output von <myProject>“ im Installateur Projekt

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 

Dies funktioniert fein. Jetzt habe ich ein Installer-Projekt und fügte die Projektausgabe hinzu. Ich würde erwarten, dass die "Primäre Ausgabe von" verwendet wird, d. H. Die exe in/bin/Release. Aber statt /bin/release/myApp.exe wird /obj/release/myApp.exe verwendet.

Weiß jemand, ob ich dieses Verhalten ändern und die Ausgabe in/bin/release für das Installer-Projekt verwenden kann? Vielen Dank.

Antwort

1

Scheint, es gibt keine echte Lösung für dieses Problem, aber eine Problemumgehung existiert. Ich habe ein Ticket auf Microsoft verbinden: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=428898

Microsofts anwser:

Hallo,

Um diese Post bauen Aktionen auszuführen, müssen Sie sie in einer Batch-Datei setzen müssen und fügen Sie dann die sachgemäße Befehl zum Aufrufen der Batch-Datei im Nacherstellungsdialog. Ich sehe, dass es im Skript mehrere Instanzen mit Verweisen auf eine Reihe von Visual Studio-Variablen gibt. Da wir diese Variablen nicht als Umgebungsvariablen offen legen, müssen Sie sie als Parameter an die Batch-Datei übergeben.

Ich hoffe, dass hilft!

Süßigkeit Chiang Program Manager - Visual Studio

+0

Dieser Link scheint nicht öffentlich zu sein ("Der von Ihnen angeforderte Inhalt kann nicht gefunden werden oder Sie sind nicht berechtigt, ihn anzuzeigen."). Da der Rest von uns es nicht sehen kann, sollten Sie es aus Ihrer Antwort entfernen. – mhenry1384

1

Ich lege die Dateien explizit, was bedeutet, dass, anstatt das Setup-Projekt, primery Inhalt zu verwenden, es die .exe/.dll-Datei explizit.
Das funktioniert ziemlich gut, ich habe zu steuern, welche Datei eingeben und das Setup-Projekt Benutzer relative Pfade, so dass das Setup-Projekt auf anderen Maschinen verwendet werden kann.

+1

Das funktioniert zwar, aber es geht darum, nicht mit verschiedenen Buildkonfigurationen arbeiten zu können, da der Speicherort für verschiedene Konfigurationen unterschiedlich ist. Im Moment habe ich eine Debug, Release und EvaluationRelease Konfiguration. – phatoni

+0

Ich weiß, wir installieren nur Release. BTW, die meisten Projekte haben Umzug nach Wix3, Sie müssen zuerst härter arbeiten, aber Sie haben die Kontrolle über alles. –

2

ich das Problem anwenden ILMerge in/obj Ordner lösen, das ist meine Post-Build-Event-Konfiguration:

COPY $ (ProjectDir) obj \ $ (Platform) \ $ (Konfigurationsname) \ $ (TargetFileName) $ (TargetDir) temp.exe $ (Lösungsverzeichnis) \ lib \ ilmerge/Platzhalter/t: exe/out: "$ (Projektverz) obj \ $ (PlatformName) \ $ (Konfigurationsname) \ $ (TargetFileName) "" $ (TargetDir) temp.exe "" $ (TargetDir) log4net.dll "" $ (TargetDir) andere.dll " DEL $ (TargetDir) temp.exe