Проблемы с использованием MsBuild с использованием командной строки для публикации нажмите один раз - PullRequest
15 голосов
/ 25 января 2010

У меня есть приложение Windows в csproj в моем решении, и я хочу сгенерировать Publish с помощью командной строки (bat, cmd).

Мой сценарий (я поставил \r\n для лучшего чтения):

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

примечание: я тоже попробую использовать /target:publish

Но в пути PublishDir или PublishUrl (C: \ ClickOnce \ CarWin.WebInstall \ Publicacion) не создает никаких файлов.

Я видел много сообщений на этом сайте и в Google, но я не нашел никакого решения.

Ответы [ 3 ]

22 голосов
/ 05 декабря 2013

Используйте PublishDir вместо PublishUrl при запуске из командной строки.

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

Вы также можете изменить версию, например ApplicationRevision = 666; MinimumRequiredVersion = 1.1

12 голосов
/ 25 января 2010

Взгляните на этот вопрос переполнения стека . В основном свойство PublishUrl игнорируется при запуске ClickOnce из командной строки. Но вы можете легко добавить поведение с помощью дополнительной задачи MSBuild.

Я создал дополнительный MSBuild-файл, например build.csproj. Это содержит publish-task. Эта задача сначала вызывает обычную сборку MS целевого проекта. После этого он копирует результат в каталог публикации. Теперь я вызываю файл build.csproj вместо стандартного файла проекта из командной строки:

    <?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>
2 голосов
/ 25 января 2010

Я не знаю, если это проблема, но я заметил, что вы передаете параметр / target дважды?

Вы можете использовать пример с разделителями-запятыми:

/target:rebuild;publish

MSDN Документация по параметрам командной строки и MSBuild

Если это также не работает, возможно, вы можете попытаться отладить его, передав

/verbosity:diag
...