ClickOnce がアプリケーションの更新を実行するしくみ
ClickOnce では、アプリケーションの配置マニフェストで指定されるファイル バージョン情報を使用して、アプリケーションのファイルを更新するかどうかを決定します。 更新が開始されると、ClickOnce はファイルの部分置換と呼ばれる手法を使用して、アプリケーション ファイルの冗長的なダウンロードを回避します。
ファイルの部分置換
アプリケーションを更新する場合、ClickOnce では、ファイルが変更されていない限り、アプリケーションの新しいバージョンのすべてのファイルがダウンロードされることはありません。 代わりに、現在のアプリケーションのアプリケーション マニフェストで指定されたファイルのハッシュ署名を、新しいバージョンのマニフェスト内のシグネチャと比較します。 ファイルのシグネチャが異なる場合は、ClickOnce によって新しいバージョンがダウンロードされます。 シグネチャが一致する場合、ファイルはあるバージョンから次のバージョンへと変更されていません。 この場合、ClickOnce では既存のファイルをコピーし、新しいバージョンのアプリケーションで使用します。 この手法により、1 つまたは 2 つのファイルのみが変更された場合でも ClickOnce によってアプリケーション全体が再度ダウンロードされることがなくなります。
ファイルの部分置換は、DownloadFileGroup メソッドと DownloadFileGroupAsync メソッドを使用して必要に応じてダウンロードされるアセンブリに対しても機能します。
Note
NET Core および .NET 5 以降のバージョンでは、System.Deployment.Application 名前空間内の ApplicationDeployment クラスと API はサポートされていません。 .NET 7 では、アプリケーションの配置プロパティにアクセスするための新しいメソッドがサポートされています。 詳細については、.NET の ClickOnce 配置プロパティへのアクセスに関するページを参照してください。 .NET 7 では、ApplicationDeployment メソッドと同等のメソッドはサポートされていません。
Visual Studio を使用してアプリケーションをコンパイルする場合、プロジェクト全体をリビルドするたびに、すべてのファイルに対して新しいハッシュ シグネチャが生成されます。 この場合、いくつかのアセンブリのみが変更された可能性があるにもかかわらず、すべてのアセンブリがクライアントにダウンロードされます。
ファイルの部分置換は、データとしてマークされ、データ ディレクトリに格納されているファイルに対しては機能しません。 これらは、ファイルのハッシュ シグネチャに関係なく、常にダウンロードされます。 データ ディレクトリの詳細については、「ClickOnce アプリケーションにおけるローカル データおよびリモート データへのアクセス」を参照してください。