7

継続的インテグレーション サーバーに TeamCity を使用しており、ClickOnce インストーラーを使用してアプリケーションをデプロイしています。インストーラーを機能させてアプリケーションを展開することはできますが、コンピューターに .net 4.5 のインストーラーがまだインストールされていない場合にそれを含める方法や、ClickOnce 展開で自動更新チェック機能を有効にする方法がわかりません。現在、以下の 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>
4

2 に答える 2

4

ブートストラップを使用して、.NET Framework のチェックなどの前提条件を処理できます。アプリケーション展開の前提条件に関する MSDN の記事、特に ClickOnce と MSBuild を使用したブートストラップに関するセクションを確認してください。

ClickOnce の前提条件のインストール方法ブートストラップ パッケージの作成方法を詳しく説明している MSDN の記事がさらに 2 つあります。

自動更新に関しては、自動更新機能をアプリケーション自体の外に配置しますか?つまり、インストーラーとアプリケーション内のどちらに配置しますか? ClickOnce Deployment API を介した自動更新など、アプリケーションでClickOnce 更新を許可する方法はいくつかあります。

ClickOnce Bootstrapper パッケージの使用に関する簡単な説明は、この既存の Stackoverflow 記事にあります。ここでは WiX を使用していませんが、この WiX スレッドを確認することもできます。これらの例は、GenerateBootstrapper MSBuild タスクを使用して、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)\" />
于 2013-02-28T13:39:59.313 に答える
1

「 https://stackoverflow.com/a/39610060/1345870 」に応答を投稿しました:

自分でこれに苦労しました-ブートストラップファイルをソース管理にコミットすることにしました。ブートストラッパーへのパスをオーバーライドすることは可能です。/p:GenerateBootstrapperSdkPath=.build\Bootstrapper

その後、レジストリを変更する必要はありません。また、ビルドが自己完結型になったという追加の利点もあります。

唯一の「問題」は、Bootstrapper ファイルを手動でソース管理にコピーする必要があることです。私の場合(VStudio2015)、これはファイルをコピーすることを意味しましたC:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper

于 2016-09-21T07:28:27.640 に答える