MSBuild не уважает свойство PublishUrl для моего приложения ClickOnce - PullRequest
22 голосов
/ 17 декабря 2009

Я пытаюсь создать пакетный файл, чтобы опубликовать несколько приложений ClickOnce, которые у нас есть, одним щелчком мыши. Для этого я использую msbuild, и в качестве примера приведенная ниже командная строка показывает, как я это делаю:

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

(для удобства чтения)

когда я запускаю указанную выше команду, она создает и публикует приложение в каталоге выпусков, т.е. bin \ release! Любая идея, почему msbuild не уважает свойство PublishUrl в моем примере выше?

PS: я пробовал также разные комбинации, в том числе удалить «Конфигурация», использовать «Перестроить» и «Опубликовать» в качестве целей и удалить кавычки, но безуспешно.

Ответы [ 3 ]

37 голосов
/ 01 февраля 2010

Вы устанавливаете неправильное свойство. Попробуйте вместо этого PublishDir.

Вы можете передать его в msBuild как есть, или вы можете установить его в файле проекта (или, может быть, в файле sln, не уверенный, что я всегда использую файл проекта).

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

Я только что сделал несколько постов в блоге о MsBuild и ClickOnce материалах, проверьте, что вы "должны" найти их полезными ...

Удачи: -)

15 голосов
/ 17 декабря 2009

Некоторые функции выполняются Visual-Studio, а не MSBuild-скриптом. Таким образом, развертывание по принципу "нажми один раз" ведет себя по-другому, когда выполняется из командной строки.

  • ApplicationRevision не увеличивается с каждой сборкой. Это работает только тогда, когда это происходит из Visual Studio
  • В некоторых случаях PublishUrl не используется. Цитата из MSDN :

    Например, вы можете установить PublishURL на FTP-путь и установить InstallURL на веб-URL. В этом случае PublishURL используется только в среде IDE для передачи файлов, но не используется в сборках командной строки. Наконец, вы можете использовать UpdateUrl, если хотите опубликовать приложение ClickOnce, которое обновляет себя из отдельного места, из которого оно установлено.

Я создал специальный MSBuild-файл, который делает это. Он запускает цель публикации и копирует файлы в нужное место.

Пример файла сборки, запрошенный alhambraeidos. Он в основном запускает обычную VisualStudio-build и затем копирует данные за один клик в папку реального выпуска. Обратите внимание, что удалены некоторые специфичные для проекта вещи, поэтому они могут быть испорчены. Кроме того, это не увеличивает номер сборки. То, что сделано нашим 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>
2 голосов
/ 10 февраля 2016

Я положу свои 2 цента, этот синтаксис работает (правильный или неправильный):

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