| name | dotnet-clickonce-config |
| description | Configure ClickOnce deployment with auto-update, prerequisites, and publish settings for .NET applications |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
| tags | ["dotnet","clickonce","deployment","auto-update","windows"] |
| graph | {"domains":["domain:software-engineering"],"specializations":["specialization:desktop-development"],"skillAreas":["skill-area:cross-platform-desktop","skill-area:deployment-infrastructure-management"],"roles":["role:desktop-developer","role:fullstack-engineer"],"workflows":["workflow:feature-development","workflow:release-management"]} |
dotnet-clickonce-config
Configure ClickOnce deployment for .NET applications with auto-update capabilities, prerequisite management, and publish settings. This skill sets up the complete ClickOnce deployment pipeline.
Capabilities
- Configure ClickOnce publish settings
- Set up automatic update checking
- Manage application prerequisites
- Configure file associations
- Set up signing with certificates
- Generate publish profiles
- Configure deployment manifest
- Set up web or file share deployment
Input Schema
{
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Path to the .NET project"
},
"publishSettings": {
"type": "object",
"properties": {
"publishUrl": { "type": "string" },
"installUrl": { "type": "string" },
"updateMode": { "enum": ["foreground", "background"] },
"updateInterval": { "type": "number" },
"minimumVersion": { "type": "string" }
}
},
"prerequisites": {
"type": "array",
"items": { "type": "string" }
},
"fileAssociations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"extension": { "type": "string" },
"description": { "type": "string" }
}
}
},
"signing": {
"type": "object",
"properties": {
"certificatePath": { "type": "string" },
"timestampUrl": { "type": "string" }
}
}
},
"required": ["projectPath", "publishSettings"]
}
Output Schema
{
"type": "object",
"properties": {
"success": { "type": "boolean" },
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": { "type": "string" },
"type": { "enum": ["pubxml", "manifest", "settings"] }
}
}
},
.csproj Configuration
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<PublishUrl>https://myserver.com/myapp/</PublishUrl>
<InstallUrl>https://myserver.com/myapp/</InstallUrl>
<UpdateUrl>https://myserver.com/myapp/</UpdateUrl>
<ApplicationRevision>1</ApplicationRevision>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<IsWebBootstrapper>true</IsWebBootstrapper>
<PublisherName>My Company</PublisherName>
<ProductName>My Application</ProductName>
<MapFileExtensions>true</MapFileExtensions>
<Install>true
Web
true
Foreground
7
Days
true
false
False
.NET Framework 4.8
true
Publish Profile (pubxml)
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<PublishProtocol>ClickOnce</PublishProtocol>
<PublishDir>bin\publish\</PublishDir>
<PublishUrl>https://myserver.com/myapp/</PublishUrl>
<InstallUrl>https://myserver.com/myapp/</InstallUrl>
<UpdateUrl>https://myserver.com/myapp/</UpdateUrl>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<TargetFramework>net8.0-windows</TargetFramework>
<SelfContained>false</SelfContained>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>false</PublishSingleFile>
false
true
Web
true
true
publish.htm
true
Foreground
7
Days
true
false
true
1234567890ABCDEF
http://timestamp.digicert.com
en-US
My Application
My Company
false
Programmatic Update Checking
using System.Deployment.Application;
public class UpdateManager
{
public async Task<bool> CheckForUpdatesAsync()
{
if (!ApplicationDeployment.IsNetworkDeployed)
{
return false;
}
var deployment = ApplicationDeployment.CurrentDeployment;
try
{
var info = deployment.CheckForDetailedUpdate();
if (info.UpdateAvailable)
{
if (info.IsUpdateRequired)
{
deployment.Update();
Application.Restart();
return true;
}
else
{
var result = MessageBox.Show(
$"Version {info.AvailableVersion} is available. Update now?",
"Update Available",
MessageBoxButton.YesNo);
if (result == MessageBoxResult.Yes)
{
deployment.Update();
Application.Restart();
return true;
}
}
}
}
catch (DeploymentDownloadException ex)
{
MessageBox.Show($"Update failed: {ex.Message}");
}
return false;
}
public Version GetCurrentVersion()
{
(ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment.CurrentDeployment.CurrentVersion;
}
Assembly.GetExecutingAssembly().GetName().Version;
}
}
Publishing Commands
dotnet publish -p:PublishProfile=ClickOnce
msbuild /t:Publish /p:PublishProfile=ClickOnce
dotnet publish -p:PublishProfile=ClickOnce -p:ApplicationRevision=$(($(date +%s)))
Signing Configuration
<PropertyGroup>
<SignManifests>true</SignManifests>
<ManifestCertificateThumbprint>YOUR_CERT_THUMBPRINT</ManifestCertificateThumbprint>
<ManifestTimestampRFC3161Url>http://timestamp.digicert.com</ManifestTimestampRFC3161Url>
</PropertyGroup>
# Find certificate thumbprint
Get-ChildItem -Path Cert:\CurrentUser\My | Format-Table Thumbprint, Subject
# Sign manually
mage -sign MyApp.application -CertFile cert.pfx -Password mypassword
Server Setup (IIS)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".application" mimeType="application/x-ms-application"/>
<mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest"/>
<mimeMap fileExtension=".deploy" mimeType="application/octet-stream"/>
</staticContent>
</system.webServer>
</configuration>
Best Practices
- Always sign manifests: Required for production
- Use semantic versioning: Clear version updates
- Set minimum version: Force updates for critical fixes
- Test update flow: Verify before releasing
- Use HTTPS: Secure download channel
- Monitor publish folder: Verify deployment success
Related Skills
windows-authenticode-signer - Code signing
auto-update-system process - Update workflow
desktop-build-pipeline process - CI/CD
Related Agents
wpf-dotnet-expert - .NET expertise
release-manager - Release coordination