Подтвердить что ты не робот

MSBuild не поддерживает свойство PublishUrl для моего приложения ClickOnce

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

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

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

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

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

4b9b3361

Ответ 1

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

  • Приложение ApplicationRevision не увеличивается с каждой сборкой. Это работает только тогда, когда вызывается из Visual Studio
  • В somecases, 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

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

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

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

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

Удачи: -)

Ответ 3

Я поставлю свои 2 цента, кажется, что этот синтаксис работает (правильно или неправильно):

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