某些功能是由 Visual-Studio 完成的,而不是由 MSBuild 脚本完成的。因此,从命令行执行时,单击一次部署的行为会有所不同。
- ApplicationRevision 不会随着每次构建而增加。这仅在从 Visual Studio 执行时有效
- 在某些情况下,不使用 PublishUrl。引用 MSDN:
例如,您可以将 PublishURL 设置为 FTP 路径,并将 InstallURL 设置为 Web URL。在这种情况下,PublishURL 仅在 IDE 中用于传输文件,而不在命令行构建中使用。最后,如果要发布一个 ClickOnce 应用程序,该应用程序从安装它的单独位置更新自身,则可以使用 UpdateUrl。
我创建了一个特殊的 MSBuild 文件来执行此操作。它运行发布目标并将文件复制到正确的位置。
alhambraeidos 要求的构建文件示例。它基本上运行常规的 VisualStudio 构建,然后将单击一次数据复制到真正的发布文件夹。请注意,删除了一些特定于项目的内容,因此它可能已损坏。此外,它不会增加内部版本号。那是由我们的 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>