2010-01-25 3 views
12

Einmal Veröffentlichen Sie habe ich Windows-Anwendung in csproj in meiner Lösung, und ich möchte generieren veröffentlichen mit der Befehlszeile (bat, cmd).Probleme mit MsBuild Befehlszeile für

Mein Skript ist (Ich habe \r\n für eine bessere Lesung):

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\" 

Anmerkung: Ich werde versuchen zu /target:publish mit

Aber in Pfad PublishDir oder PublishUrl (C: \ Clickonce \ Carwin. WebInstall \ Publicacion) erzeugt keine Dateien.

Ich habe viele Beiträge auf dieser Webseite gesehen und Google, aber ich keine Lösung gefunden.

Antwort

11

Nehmen ein Blick auf this Stack Overflow question. Grundsätzlich ist die PublishUrl Eigenschaft wird ignoriert, wenn Clickonce von der Kommandozeile ausgeführt wird. Sie können das Verhalten jedoch leicht mit einer zusätzlichen MSBuild-Task hinzufügen.

Ich habe eine zusätzliche MSBuild-Datei erstellt, zum Beispiel ein build.csproj. Dies enthält eine . Diese Task ruft zuerst den regulären MS-Build des Zielprojekts auf. Anschließend kopiert es das Ergebnis in das Publish-Verzeichnis. Jetzt rufe ich den ‚build.csproj‘ anstelle der reguar Projekt-Datei von der Befehlszeile:

<?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

Danke Herr !!! Du bist toll, fantastische Beispielcode –

2

Ich weiß nicht, ob dies ein Problem ist, aber ich merkte, dass Sie den/Zielparameter zweimal passieren?

Sie könnten Sie ein Semikolon Beispiel begrenzt:

/target:rebuild;publish 

MSDN Documentation on command line parameters and MSBuild

Wenn das auch nicht, dass Sie vielleicht nicht funktionieren könnte versuchen, es zu debuggen, indem

vorbei
/verbosity:diag 
+0

Ich versuche/Ziel: Wiederaufbau, veröffentlichen und nur/Ziel: veröffentlichen, aber nicht erzeugt Dateien veröffentlichen. Jede Idee, bitte ?? Vielen Dank !!! –

+0

Führen Sie es mit/Ausführlichkeit: Diag und post diese Ausgabe –

+0

das Logfile der Ausgabe hat Größe mehr als 1 MB !!! unmöglich post hier ... das Problem .. Ich bekomme es nicht veröffentlichen in dem Ordner, den ich in cmd-Datei einfügen ... danke. –

16

Verwenden PublishDir statt PublishUrl wenn von der Kommandozeile ausgeführt wird.

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

Sie können auch Version ändern, wie ApplicationRevision = 666; MinimumRequiredVersion = 1,1

+0

für PublishDir, ist es wichtig, die Endung "\" – liang

+0

Dies sollte als die richtige Antwort markiert sein –