2010-01-25 11 views
12

Ho un'applicazione Windows in csproj nella mia soluzione, e voglio generare Publish usando la riga di comando (bat, cmd).Problemi nell'utilizzo di MsBuild utilizzando la riga di comando per Publish Click Once

Il mio script è (ho messo \r\n per una migliore lettura):

SET MSBUILD="%SystemRoot%\Microsoft.NET\Framework\v3.5\MSBuild.exe" 
    SET CARWIN="..\..\Security.CarWin.csproj" 

    rem msbuild para publish 

    %MSBUILD% /target:rebuild;publish %CARWIN% 
/p:ApplicationVersion="1.0.0.0" 
/p:Configuration=release 
/p:PublishUrl="C:\ClickOnce\CarWin.WebInstall\Publicacion\" 
/p:InstallUrl="http://desserver/carwinclickonce/Publicacion/" 
/p:PublishDir="C:\ClickOnce\CarWin.WebInstall\Publicacion\" 

nota: proverò anche utilizzando /target:publish

Ma nel percorso PublishDir o publishUrl (C: \ ClickOnce \ Carwin. WebInstall \ Publicacion) non genera alcun file.

Ho visto molti post in questo sito e su Google ma non ho trovato alcuna soluzione.

risposta

11

Prendere uno sguardo a this Stack Overflow question. Fondamentalmente la proprietà PublishUrl viene ignorata quando si esegue ClickOnce dalla riga di comando. Ma puoi facilmente aggiungere il comportamento con un'attività addizionale di MSBuild.

Ho creato un file MSBuild aggiuntivo, ad esempio uno build.csproj. Questo contiene publish-task. In primo luogo, questa attività richiama il normale MS-Build del progetto di destinazione. Successivamente copia il risultato nella directory di pubblicazione. Ora invoco la 'build.csproj' al posto del progetto file reguar dalla riga di comando:

<?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="3.5" DefaultTargets="Publish" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
     <PropertyGroup> 
     <!-- project name--> 
     <ProjectName>MyExampleProject</ProjectName> 
     <!--properties for the project-build--> 
     <DefaultBuildProperties>Configuration=Release</DefaultBuildProperties> 
     <!-- location of the click-once stuff, relative to the project --> 
     <ProjectPublishLocation>.\bin\Release\app.publish</ProjectPublishLocation> 
     <!-- Location you want to copy the click-once-deployment. Here an windows-share--> 
     <ProjectClickOnceFolder>\\TargetServer\deployments</ProjectClickOnceFolder> 
     </PropertyGroup> 
     <Target Name="Publish" DependsOnTargets="Clean"> 
     <Message Text="Publish-Build started for build no $(ApplicationRevision)" /> 
     <!-- run the original build of the project --> 
     <MSBuild Projects="./$(ProjectName).csproj" 
     Properties="$(DefaultBuildProperties)" 
     Targets="Publish"/> 
     <!-- define the files required for click-once--> 
     <ItemGroup> 
      <SetupFiles Include="$(ProjectPublishLocation)\*.*"/> 
      <UpdateFiles Include="$(ProjectPublishLocation)\Application Files\**\*.*"/> 
     </ItemGroup> 
     <!-- and copy them --> 
     <Copy 
     SourceFiles="@(SetupFiles)" 
     DestinationFolder="$(ProjectClickOnceFolder)\"/> 
     <Copy 
     SourceFiles="@(UpdateFiles)" 
     DestinationFolder="$(ProjectClickOnceFolder)\Application Files\%(RecursiveDir)"/> 
     </Target> 
     <Target Name="Clean"> 
     <Message Text="Clean project" /> 
     <MSBuild Projects="./$(ProjectName).csproj" 
     Properties="$(DefaultBuildProperties)" 
     Targets="Clean"/> 
     </Target> 
    </Project> 
+0

Grazie signore !!! sei un ottimo, fantastico codice di esempio –

2

Non so se questo è un problema, ma ho notato che si passa il parametro/target due volte?

si potrebbe utilizzare un punto e virgola delimitato esempio:

/target:rebuild;publish 

MSDN Documentation on command line parameters and MSBuild

Se che anche non funziona si potrebbe forse provare ad eseguire il debug passando

/verbosity:diag 
+0

cerco/target: ricostruzione; pubblicare e solo/target: pubblicare, ma non genera file di pubblicazione. Qualche idea, per favore ?? Grazie !!! –

+0

Eseguilo con/verbosity: diag e pubblica quell'output –

+0

il file di log dell'output ha una dimensione superiore a 1 MB !!! impossibile postare qui ... il problema .. Non riesco a pubblicarlo nella cartella che ho messo nel file cmd ... grazie. –

16

Uso PublishDir invece di publishUrl durante l'esecuzione da linea di comando.

msbuild /target:publish /p:Configuration=Release;PublishDir=c:\playground\ 

È inoltre possibile modificare la versione, come ApplicationRevision = 666; MinimumRequiredVersion = 1.1

+0

per PublishDir, è importante avere la desinenza "\" – liang

+0

Questa dovrebbe essere contrassegnata come la risposta corretta –

Problemi correlati