2009-12-17 4 views
20

Ich versuche, eine Batch-Datei zu erstellen, um die wenigen ClickOnce-Anwendungen zu veröffentlichen, die wir mit einem Klick haben. Ich verwende msbuild für das, und als Beispiel der folgende Befehlszeile zeigt, wie ich es so mache:MSBuild respektiert die PublishUrl-Eigenschaft für meine ClickOnce-App nicht

msbuild 
    MyApp.sln 
    /t:Publish 
    /p:Configuration=Release 
    /p:PublishUrl="C:\Apps\" 
    /v:normal > Log.txt 

(zum leichteren Lesen verpackt)

, wenn ich den obigen Befehl führen Sie es erstellt und veröffentlicht die Anwendung im Freigabeverzeichnis, dh bin \ release! Irgendeine Idee warum msbuild die PublishUrl Eigenschaft in meinem obigen Beispiel nicht respektiert?

PS: Ich habe auch verschiedene Kombinationen versucht, darunter "Konfiguration" entfernen, "Neu erstellen" und "PublishOnly" als Ziele verwenden und die Anführungszeichen entfernen, aber ohne Erfolg.

Vielen Dank im Voraus,

Essam

+10

Verwenden 'PublishDir' statt' PublishUrl'. Problem gelöst. – BrainSlugs83

Antwort

14

einige Funktionen von Visual-Studio und nicht durch den MSBuild-Skript fertig sind. Daher verhält sich die Click-Once-Bereitstellung anders, wenn sie über die Befehlszeile ausgeführt wird.

  • Die ApplicationRevision wird nicht mit jedem Build erhöht. Dies funktioniert nur, wenn von Visual Studio
  • erwartet In einigen Fällen wird die PublishUrl nicht verwendet. Quote from MSDN:

    Beispielsweise können Sie die PublishURL auf einen FTP-Pfad festlegen und die InstallURL auf eine Web-URL festlegen. In diesem Fall wird die PublishURL nur in der IDE verwendet, um die Dateien zu übertragen, aber nicht in den Befehlszeilen-Builds. Schließlich können Sie UpdateUrl verwenden, wenn Sie eine ClickOnce-Anwendung veröffentlichen möchten, die sich selbst von einem separaten Ort aktualisiert, von dem sie installiert wird.

Ich habe eine spezielle MSBuild-Datei erstellt, die diese Dinge tut. Es führt das Veröffentlichungsziel aus und kopiert dann die Dateien an den richtigen Speicherort.

Ein Beispiel für die Build-Datei, wie von alhambraeidos angefordert. Es führt im Grunde das normale VisualStudio-Build aus und kopiert die Click-Once-Daten anschließend in den echten Release-Ordner. Beachten Sie, dass einige projektspezifische Dinge entfernt wurden, also ist es vielleicht kaputt. Außerdem erhöht es nicht die Build-Nummer. Das macht unser Continues-Build-Server:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Publish" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <!-- the folder of the project to build --> 
     <ProjLocation>..\YourProjectFolder</ProjLocation> 
     <ProjLocationReleaseDir>$(ProjLocation)\bin\Release</ProjLocationReleaseDir> 
     <ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation> 
     <!-- This is the web-folder, which provides the artefacts for click-once. After this 
     build the project is actually deployed on the server --> 
     <DeploymentFolder>D:\server\releases\</DeploymentFolder> 
    </PropertyGroup> 


    <Target Name="Publish" DependsOnTargets="Clean"> 
     <Message Text="Publish-Build started for build no $(ApplicationRevision)" /> 
     <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Publish"/> 


     <ItemGroup> 
      <SchoolPlannerSetupFiles Include="$(ProjPublishLocation)\*.*"/> 
      <SchoolPlannerUpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/> 
     </ItemGroup> 
     <Copy 
      SourceFiles="@(SchoolPlannerSetupFiles)" 
      DestinationFolder="$(DeploymentFolder)\" 
     /> 
     <Copy 
      SourceFiles="@(SchoolPlannerUpdateFiles)" 
      DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)" 
     />  
     <CallTarget Targets="RestoreLog"/> 
    </Target> 
    <Target Name="Clean"> 
     <Message Text="Clean project:" /> 
     <MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Clean"/> 
    </Target>  
</Project> 
+0

Bitte, jedes Beispiel dieser speziellen Msbuild-Datei .. – Kiquenet

+0

Ich habe ein Beispiel hinzugefügt. Es ist eine verkürzte Version, die ich benutze. Es gibt sicherlich Raum für Verbesserungen. – Gamlor

+2

Dies hängt nicht mit dem Problem zusammen. Das Problem ist, dass er "PublishUrl" mit "PublishDir" verwirrt. Die zwei Parameter sind nicht gleich und machen verschiedene Dinge. – BrainSlugs83

36

Sie setzen die falsche Eigenschaft. Versuchen Sie stattdessen PublishDir.

Sie können es in msbuild passieren, wie Sie sind, oder Sie es in der Projektdatei festlegen können (oder vielleicht die SLN-Datei auch nicht sicher, ob ich immer die Projektdatei verwenden.) Wie diese

 <PropertyGroup> 
    <PublishDir>C:\Dev\Release\$(BuildEnvironment)\</PublishDir> 
    </PropertyGroup> 

I habe gerade ein paar Blog-Posts auf MsBuild and ClickOnce Sachen gemacht, schau es dir an, du solltest sie nützlich finden ...

Viel Glück :-)

+1

'' funktioniert für mich mit MSBuild 4 –

+0

Ich habe es heute versucht und mit PublishDir funktioniert für mich. –

+0

@ivan_pozdeev, Ich habe meinen Kommentar gelöscht. –

2

ich in meine 2 Cent gesetzt werden, scheint diese Syntax (richtig oder falsch) zu arbeiten:

/p:publishUrl="C:\\_\\Projects\\Samples\\artifacts\\Web\\" 
Verwandte Themen