Ответ 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>