如何发布包含.net安装程序和自动更新功能的clickonce安装程序?

PlT*_*lor 7 msbuild clickonce teamcity-7.0

我正在使用TeamCity作为持续集成服务器,并使用ClickOnce安装程序部署我的应用程序.我可以让安装程序运行并部署我的应用程序,但如果计算机尚未安装它或如何在ClickOnce部署中启用自动更新检查功能,我无法弄清楚如何包含.net 4.5的安装程序.我目前正在使用下面的MSBuild文件来构建我的安装程序

<Project DefaultTargets="DoPublish" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
  <PropertyGroup>
    <Version>$(BUILD_NUMBER)</Version>
    <Install>true</Install>
    <InstallFrom>Unc</InstallFrom>
    <UpdateEnabled>true</UpdateEnabled>
    <UpdateMode>Background</UpdateMode>
    <ClickOnceBuildDirectory>$(MSBuildProjectDirectory)\MyProject\bin\$(Configuration)\app.publish</ClickOnceBuildDirectory>
    <ClickOnceInstallDirectory>$(MSBuildProjectDirectory)\Publish</ClickOnceInstallDirectory>
    <ClickOnceFinalLocation>$(env_PublishUrl)</ClickOnceFinalLocation>
  </PropertyGroup>
  <Target Name="DoPublish">
    <RemoveDir Directories="$(ClickOnceInstallDirectory)" ContinueOnError="true" />
    <MSBuild Projects="MyProject.sln" Targets="Clean;Build" Properties="ApplicationVersion=$(Version);Configuration=$(Configuration)"/>
    <MSBuild Projects="MyProject\MyProject.csproj" Targets="Publish" Properties="ApplicationVersion=$(Version);Configuration=$(Configuration);InstallUrl=$(ClickOnceFinalLocation)" />
    <MakeDir Directories="$(ClickOnceInstallDirectory)"/>    
    <Exec Command="xcopy /E $(ClickOnceBuildDirectory) $(ClickOnceInstallDirectory)" />    
  </Target>  
</Project>
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 4

您可以使用引导程序来处理先决条件,例如检查 .NET Framework。查看应用程序部署先决条件MSDN 文章,尤其是有关使用 ClickOnce 和 MSBuild 进行引导的部分。

还有另外 2 篇 MSDN 文章详细介绍了如何安装 ClickOnce 先决条件创建引导程序包

至于自动更新,您是否希望将自动更新功能定位在应用程序本身之外,即在安装程序中还是在应用程序中?有多种方法可以在应用程序中允许 ClickOnce 更新,包括通过 ClickOnce 部署 API 自动更新

有关使用 ClickOnce Bootstrapper 包的简要说明可以在这篇现有的 Stackoverflow 文章中找到。虽然您在这里没有使用 WiX,但您也可以检查此WiX 线程,这很有用,因为您会看到一些在此过程中不起作用的步骤。这些示例显示如何使用GenerateBootstrapper MSBuild 任务为ClickOnce 安装程序创建引导程序。请注意,在上述链接的示例中,GenerateBootstrapper 任务中的“Path”被设置为 Windows SDK 位置下的子文件夹。可以将其更改为其他位置,只要该位置具有必要的必备包即可。

下面是一个示例,其中将 .NET 4.5 Framework 设置为安装的先决条件。.NET 4.5 先决条件的父目录结构由 $(MyPathToPrecessionPackages) 属性指定。

下面示例中的BootstrapperFile指定 .NET 4.5 Framework 必备包。值“.NETFramework,Version=v4.5”来自Bootstrapper\Packages\DotNetFX45 文件夹中的product.xml 文件,它允许GenerateBootstrapper任务正确识别.NET 4.5 先决条件/引导程序包。“ProductName”值只是对包的友好描述。

<PropertyGroup>
  <MyPathToPrerequisitePackages>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper</MyPathToPrerequisitePackages>
</PropertyGroup>
<ItemGroup>
  <BootstrapperFile Include=".NETFramework,Version=v4.5">
    <ProductName>.NET Framework 4.5</ProductName>
  </BootstrapperFile>
</ItemGroup>
<GenerateBootstrapper 
  ApplicationFile="$(MyAppAssembly).application"
  ApplicationUrl="$(MyClickOnceAppUrl)"
  ApplicationName="$(MyClickOnceAppName)"
  BootstrapperItems="@(BootstrapperFile)"
  Culture="en"
  FallbackCulture="en-US"
  CopyComponents="true"
  Validate="false"
  Path="$(MyPathToPrerequisitePackages)"
  SupportUrl="$(MyAppSupportUrl)"
  OutputPath="$(MyDesiredOutputPath)\" />
Run Code Online (Sandbox Code Playgroud)