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

时间:2013-02-27 20:35:00

标签: 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>

2 个答案:

答案 0 :(得分:4)

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

另外还有2篇MSDN文章详细介绍了how to install ClickOnce prerequisitesCreating bootstrapper packages

对于自动更新,您是否希望在应用程序本身之外找到自动更新功能,即在安装程序中还是在应用程序中?您的应用中有several ways to allow ClickOnce updates,包括auto-updates via the ClickOnce Deployment API

可以在this existing Stackoverflow article中找到使用ClickOnce Bootstrapper软件包的简要说明。虽然您没有在这里使用WiX,但您也可以查看此this WiX thread,这很有用,因为您会看到一些不起作用的步骤。这些示例显示了使用GenerateBootstrapper MSBuild task为ClickOnce安装程序创建引导程序。请注意,在上述链接的示例中,GenerateBootstrapper任务中的“路径”设置为Windows SDK位置下的子文件夹。只要该位置具有必要的必备软件包,就可以将其更改为其他位置。

以下是将.NET 4.5 Framework设置为安装的先决条件的示例。 .NET 4.5先决条件的父目录结构由$(MyPathToPrerequisitePackages)属性指定。

以下示例中的 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)\" />

答案 1 :(得分:1)

刚刚在&#39; https://stackoverflow.com/a/39610060/1345870&#39;:

上发布了回复

我自己也在苦苦挣扎 - 我选择将引导程序文件提交给源代码控制。可以覆盖bootstrappers的路径,只需提供/p:GenerateBootstrapperSdkPath=.build\Bootstrapper

即可

然后无需修改注册表 - 以及构建现在自包含的额外好处。

只有&#34;问题&#34;是我必须手动将Bootstrapper文件复制到源代码管理中。就我而言(VStudio2015),这意味着从C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

复制文件