VS .NET: Erstellen von Ereignissen für „Primärausgabe von “ im Installationsprojekt
-
22-08-2019 - |
Frage
Ich verwende die folgenden Post -Build -Aktionen in einem Projekt, um eine LIB in meine Bewerbung zusammenzuführen:
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
Das funktioniert gut. Jetzt habe ich ein Installationsprojekt und fügte die Projektausgabe hinzu. Ich würde erwarten, dass die "Primärausgabe von" verwendet wird, dh die exe in /bin /release. Aber tatsächlich wird anstelle von /bin/release/myapp.exe /obj/release/myapp.exe verwendet.
Weiß jemand, ob ich dieses Verhalten ändern und die Ausgabe in /bin /Release für das Installationsprojekt verwenden kann? Vielen Dank.
Lösung 3
Es scheint, dass es keine wirkliche Lösung für dieses Problem gibt, aber es gibt eine Problemumgehung. Ich habe ein Ticket für Microsoft Connect erstellt: https://connect.microsoft.com/visualstudio/feedback/viewfeedback.aspx?feedbackid=428898
Microsofts Anwser:
Hi,
Um diese Post -Build -Aktionen auszuführen, müssen Sie sie in eine Stapeldatei einfügen und dann den Befehl für die Anerkennung hinzufügen, um die Stapeldatei im Dialogfeld "Post -Build -Ereignis" aufzurufen. 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 enthüllen, müssen Sie sie als Parameter an die Stapeldatei übergeben.
Ich hoffe das hilft!
Candy Chiang -Programmmanager - Visual Studio
Andere Tipps
Ich löste das Problem an. Anwenden Sie Ilmerge in /obj-Ordner an. Dies ist meine Konfiguration nach dem Bau von Ereignissen:
Kopieren Sie $ (projectDir) obj $ (plattformname) $ (configurationName) $ (targetFileName) $ (targetdir) temp.exe $ (lösungsdir) lib ilmerge /Wildcards /t: exe /out: "$ (projectdir) obj $ (plattformname) $ (configurationName) $ (targetFileName) "$ (targetdir) temp.exe" "$ (targetdir) log4net.dll" .exe
Ich stelle die Dateien explizit ein, was bedeutet, dass die Datei .exe/.dll, anstatt das Setup -Projekt zu verwenden, explizit.
Das funktioniert ziemlich gut. Ich kann steuern, welche Datei eingeben würde, und die relativen Pfade des Setup -Projekts, damit das Setup -Projekt für andere Maschinen verwendet werden kann.