2010-01-25 26 views
12

que tienen una aplicación de Windows en csproj en mi solución, y quiero generar Publicar usando la línea de comandos (bat, cmd).problemas utilizando MSBUILD mediante línea de comandos para publicar haga clic una vez

Mi guión es (pongo \r\n para una mejor lectura):

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: Voy a intentar también usando /target:publish

Pero en ruta PublishDir o publishUrl (C: \ ClickOnce \ Carwin. WebInstall \ Publicacion) no genera ningún archivo.

he visto muchos mensajes en este sitio y Google, pero no me encontrado ninguna solución.

Respuesta

11

Take un vistazo al this Stack Overflow question. Básicamente, la propiedad PublishUrl se ignora al ejecutar ClickOnce desde la línea de comando. Pero puede agregar fácilmente el comportamiento con una tarea MSBuild adicional.

He creado un archivo de MSBuild-adicional, por ejemplo, un build.csproj. Esto contiene un publish-task. Esta tarea invoca primero el MS-Build regular del proyecto-objetivo. Después, copia el resultado en el directorio de publicación. Ahora invoco la 'build.csproj' en lugar del proyecto reguar-archivo desde la línea de comandos:

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

Gracias señor !!! y grande, fantástico código de ejemplo para sted –

2

No sé si esto es un problema, pero me di cuenta de que pasa el parámetro/target dos veces?

que podría utilizar un punto y coma ejemplo delimitado:

/target:rebuild;publish 

MSDN Documentation on command line parameters and MSBuild

Si eso también no funciona, tal vez podría intentar depurarlo pasando

/verbosity:diag 
+0

Trato/objetivo: reconstruir; y sólo publicar/objetivo: publicar, pero no genera archivos de publicación. ¿Alguna idea, por favor? Gracias !!! –

+0

Ejecútelo con/verbosity: diag y publique esa salida –

+0

el archivo de registro de salida tiene un tamaño de más de 1 MB !!! puesto imposible aquí ... el tema .. No consigo publicar en la carpeta que puse en el archivo cmd ... gracias. –

16

Uso PublishDir en lugar de publishUrl cuando se ejecuta desde la línea de comandos.

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

También puede cambiar la versión, como ApplicationRevision = 666; MinimumRequiredVersion = 1,1

+0

PublishDir, es importante contar con la terminación "\" – liang

+0

Esto debe ser marcada como la respuesta correcta –

Cuestiones relacionadas