我正在使用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>
答案 0 :(得分:4)
您可以使用引导程序来处理检查.NET Framework等先决条件。查看Application Deployment Prerequisites MSDN文章,尤其是有关使用ClickOnce和MSBuild进行引导的部分。
另外还有2篇MSDN文章详细介绍了how to install ClickOnce prerequisites和Creating 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