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, and your second Foo.application deployment is, 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.