ClickOnce Identities: What They Are, Why You Should Care

I haven't written much in the ClickOnce docs about the concept of a
ClickOnce identity. Recent support inquiries have shown me that an
understanding of this concept can help solve some very confusing
problems.

What is a ClickOnce Identity? The identity of a ClickOnce
application is expressed by all of the properties (minus version) of
the applicationIdentity element in the deployment manifest:

  • Application name (specified as "Product Name" in Visual Studio)

  • Public key token

  • Language

  • Processor architecture

Why Should I Care? If two ClickOnce deployments have an
applicationIdentity element with all four of these attributes in
common, then they are deploying the same application regardless of the location of the deployments.

In other words, say that you have created two separate applications.
Both of the projects are named Foo in Visual Studio. By default, Visual
Studio will use the name Foo.application for the Product Name field. If
you sign both applications with the same public key token, and deploy
both to the same machine, you will only have one installed
application. The same thing will happen if you attempt to create two
"separate" deployments of the same application without changing the
product name.

What happens if the version numbers are different? If your first
Foo.application deployment is version 1.0.0.0, and your second
Foo.application deployment is 1.0.0.1, the second deployment will
overwrite the first. ClickOnce will consider the second deployment as
an update of the first.

You can alter the identity of your application in Visual Studio by either:

  1. Changing the Product name. Right-click your project in VS. Select Properties. On the Publish tab, click Options. Enter the new name into the Product name dialog.

  2. Signing it with a different public key.