We have several deployments of the same assemblies with different configuration files for different environments. We package these up in to separate ClickOnce deployments with different Deployment Identities (Program_ENV1, Program_ENV2, etc.).
The Application Identity is Program.exe for all of them, because we have a third-party component that requires the executable using it to have the same name as it was compiled for.
When we want to have multiple installs of the same version number on the same machine (for testing), we get an error on installation that something with the same application identity already exists.
We don't want to make separate builds with new version numbers for each deployment (QA signed off on version X.X.X.45 assemblies, not version X.X.X.46).
Is there another way around this issue?
A ClickOnce application manifest is an XML file that describes an application that is deployed using ClickOnce. ClickOnce application manifests have the following elements and attributes. Element. Description.
ClickOnce data directory. Every ClickOnce application installed on a local computer has a data directory, stored in the user's Documents and Settings folder. Any file included in a ClickOnce application and marked as a "data" file is copied to this directory when an application is installed.
ClickOnce is a deployment technology that enables you to create self-updating Windows-based applications that can be installed and run with minimal user interaction.
To run concurrent versions of a ClickOnce application, you must change the AssemblyName, and it's recommended that you also change the ProductName in the Publish properties, so you can tell in a start menu which one is which.
Click here to see how to Install Multiple Versions Concurrently
I ended up using -u -Update option to create a new Deployment for QA based on Production.
Here are the steps I did to test a verify
cd "$(TargetDir)"
"$(ProjectDir)mage.exe" -New Application -Name $(ProjectName) -p msil -TrustLevel FullTrust -Version 1.0.0.0 -FromDirectory . -ToFile ".\$(TargetFileName).manifest"
"$(ProjectDir)mage.exe" -New Deployment -Install false -Name $(ProjectName) -p msil -Version 1.0.0.0 -AppManifest ".\$(TargetFileName).manifest" -ToFile ".\$(TargetName).application"
"$(ProjectDir)mage.exe" -Update ".\$(TargetName).application" -Install false -Name $(ProjectName).QA -p msil -Version 1.0.0.0 -AppManifest ".\$(TargetFileName).manifest" -ToFile ".\$(TargetName).QA.application"
I needed to change to the "$(TargetDir)" via cd "$(TargetDir)" because mage wouln't process directories and filepaths correctly when I gave it paths with spaces that are enclosed in double quotes. To get around that, I set the current directory to the location of where the files are built to.
The 2nd line creates the manifest file
The 3rd line creates the Production deployment file.
The 4th line creates the QA deployment file from the Production deployment file. (NOTE: I'm adding QA to the deployment file and the Application Name.)
The 4th line causes a 2nd application file to get created. When both applications are ran, they will have the same binaries but the ApplicationDeployment.UpdateLocation will be different for each. One will have the filename $(TargetName).application and the other will have the filename $(TargetName).QA.application. In my code I can use this to determine which 'Version' of the Application was ran (QA or Production)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With