2010-10-08 2 views

Antwort

8

Mit Blick auf die MSBuild-Dateien, die Visual Studio verwendet, wird das Post-Build-Ereignis vom Build-Ziel ausgeführt. Wenn Sie msbuild über die Befehlszeile ausführen und das Publish-Ziel direkt aufrufen, ruft es definitiv Build zuerst auf. Wenn Sie in VS mit der rechten Maustaste auf das Projekt klicken und auf Veröffentlichen klicken, wird ein abgespecktes Ziel mit dem Namen PublishOnly ausgeführt, wobei davon ausgegangen wird, dass VS bereits einen Build erstellt hat.

Ihr Postbuild-Ereignis sollte von Visual Studio ausgeführt werden, wenn es Ihr Projekt vor der Veröffentlichung automatisch erstellt. Haben Sie auf der Registerkarte "Ereignisse erstellen" der Eigenschaften Ihres Projekts das Ereignis auf "Immer ausführen" gesetzt?

Wenn Sie mehr über die Vorgänge vor dem Veröffentlichen erfahren möchten, gibt es ein BeforePublish-Ziel, nach dem Publish immer sucht, unabhängig davon, ob es von MSBuild oder Visual Studio ausgeführt wird. Bearbeiten Sie Ihre Projektdatei von Hand, und unten sehen Sie einige auskommentierte Zielelemente. In einem Ihrer eigenen wie folgt aus:

<Target Name="BeforePublish"> 
    <Exec Condition="'$(PostBuildEvent)' != ''" 
      WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" /> 
</Target> 

, dass die gleiche Postbuildereignis Sie in Ihrem Projekt definiert wird laufen, aber man konnte keine MSBuild Aufgaben innerhalb dieser Zielelemente setzen.

+4

Also mein Build-Event ist es, die richtige app.config zu kopieren (ich habe eine dev-, test- und prod-Version) und verschlüssle es. Das Postbuildereignis wird zwar ausgelöst (danke), aber ich habe festgestellt, dass diese app.config nicht in das Veröffentlichungsmanifest kopiert wird. Stattdessen scheint es die ursprüngliche app.config aus dem Projekt auszuwählen. – Brad

+0

ClickOnce veröffentlicht alles in Ihrem Projekt mit einer Build-Aktion "Inhalt". Stellen Sie daher sicher, dass Ihre Quelle app.config die Build-Aktion None hat. Das wird nicht verhindern, dass app.config vom Build in MyApp.exe.config umbenannt wird. ClickOnce wird die exe.config abholen, da der Build es als Ausgabe auflistet. Wenn Sie die Datei exe.config in Ihrem Debug/Release-Ordner im BeforePublish-Ziel ersetzen, sollte ClickOnce Ihre verschlüsselte Version abrufen. –

+1

@Ray ... aber Problem ist ClickOnce nicht exe.config aus dem Debug/Release-Ordner abholen. Es wird von "App Config" ausgewählt, was auch immer das ist. Dies ist eine Zeile aus dem Ausgabefenster von Visual Studio während einer ClickOnce-Veröffentlichungssitzung: Kopieren der Datei von "App.config" nach ".. \ .. \ .. \ bin \ MEO_D_E_Release \ app.publish \ Anwendungsdateien \ EMS.OCC600.Infrastruktur". Shell_1_0_4_28 \ EMS.OCC600.Infrastructure.Shell.exe.config ". –

Verwandte Themen