Amazon S3 に Visual Studio 2022 で作成した ClickOnce を発行してみた

2022.06.04

いわさです。

.NETデスクトップアプリケーションを配信する方法のひとつにClickOnceというものがあります。

ClickOnce自体は.NET Framework 2.0あたりから存在していたと記憶していますが、最新のVisual Studio 2022での発行の流れを確認したかったので、おさらいを兼ねてAmazon S3バケットで静的ホスティングを有効化し、パブリックインターネットで配信できる状態のものを試してみました。

その際に、AWS Tooklit for Visual Studio 2022 で ClickOnceをデプロイすることができるのかも確認してみたのですが、この拡張機能から直接ClickOnceアプリケーションを発行することは出来ないので、ホスティングサービスを構成し手動でClickOnceアプリケーションを発行した上で配置する必要があります。

この記事では、Windows向けに作成した単純な.NET Framework 4.7.2のコンソールアプリケーションを、Visual Studio 2022 を使ってClickOnceで発行し、静的ホスティングを有効化したS3バケットからインストールさせるための手順を記します。

Amazon S3バケットを作成する

ClickOnceの発行ウィザードの中でデプロイURLが必要なので、先にS3静的ホストを作成します。
厳密にはあとからClickOnceマニフェストファイルの発行URLを更新することも可能です。

S3バケットはパブリックアクセスブロックをオフにし、以下のバケットポリシーを設定します。
これによって認証なしでパブリックインターネットから誰でもアクセス出来るバケットとなります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hoge0601clickonce/*"
        }
    ]
}

さらに、S3の静的ウェブサイトホスティング機能を有効化します。
これによって、S3で静的コンテンツをWebサイトとして配信することが出来るようになります。

これでS3バケットへClickOnceアプリケーションを配置出来る状態になりました。
この記事では、不特定多数にClickOnceアプリケーションを公開する前提となっている点にご注意ください。

Visual Studio 2022 で ClickOnceアプリケーションを作成

今回は .NET Framework 4.7.2 コンソールアプリケーションを作成し、ClickOnceアプリケーションとして配信してみます。
コンソールアプリ自体はエントリポイントだけの最小のやつです。(using句整理するの忘れてました)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hoge!!!");
            Console.ReadKey();
        }
    }
}

コンソールアプリケーションのプロジェクトを右クリックし、「発行(B)…」メニューを選択します。

「このアプリケーションを公開する場所」はデフォルトのままpublishにしておきます。

どのようにインストールするか、で「Webサイトから(W)」を選択し、URLには先程作成されたS3バケット静的ホスティングURLを指定します。

あとはバージョンや署名など細かい設定があるのですがここでは割愛します。
詳細は以下をご確認ください。

ClickOnce を使用して .NET Windows デスクトップ アプリケーションを配置する - Visual Studio (Windows) | Microsoft Docs

ローカルフォルダに出力されたClickOnceアプリケーションをマニフェストなど含めて一式S3バケットへアップロードします。

ブラウザでアクセス

Webブラウザで発行時に出力されたURLへアクセスします。
.NET Frameworkのインストール案内が表示されますがインストール済みなのでここは省略し、「起動」のリンクを押下します。

アプリケーションのインストールが開始されるのでインストールします。

アプリケーションが実行されました。

次回以降はメニューのインストール済みClickOnceアプリケーションから起動出来ます。
これで、バージョンアップ時なども配信されるようになります。

さいごに

本日はVisual Studio 2022を使ってClickOnceアプリケーションを発行し、S3バケットから配信してみました。
Azure Blobの静的ホストで配信している記事をみかけたのでS3でも問題なく出来るだろうと思っていましたが、大丈夫でした。

また、Visual Studio もいまや2022ですが、あまりClickOnceの発行ウィザードは変わってないような記憶です。
特に違和感なく使用出来たので、数年経っているClickOnceの技術記事を有効なのではないかと思いました。