I am working on a large click-once application (150MB, >200 DLLs) and as part of the interative debugging process I would like to update just 1 DLL and relaunch the application without having to rebuild and redeploy the entire application.
Is that possible? If so... how?
Question Clarification: 9/26/2009
I know that it is possible to manually patch DLLs on the client after it has downloaded the entire application and then launch the client .EXE directly from the local cache folder. That's not the point. I want to know how to change/add a DLL on the server and have all clients get the new DLL the next time they launch. I am looking for a "copy the DLL to this folder and edit this text file" kind of answer if possible. I specifically do NOT want to have rebuild or redeploy the click-once install on the server... just patch it by hand with a single DLL that I compiled in the IDE.
I have been fighting with this for a couple of days, it can be done but it's fiddly, With this solution ClickOnce still scans all files and shows the progress bar but only downloads and updates the changes.
Here is the process I have written to apply this patching method...
Note this process need to be carried on with an exact copy of the Click once deployment to be upgraded.
In the Application Files folder…
- open .exe.manifest using mageui (version 3.5 or greater assuming VS2010)
Change the version number
Replace the patched file(s) Note: files are renamed with the filename .deploy E.g. Control.DLL becomes control.DLL.Deploy
- Sign & Save the File with you PFX file
In the Root Path
- Open .application file using mageui (version 3.5 or greater)
- Change the version number
- Change the minimum required version number
- Select the exe.manifest modified above
- Sign & Save the File
Copy .application to Application Files folder*
Note: This step is not strictly necessary, but just keeps the backup files relevant.
Manifest files and patched libraries can now be copied to your deployment environment.
I'm having the same problem here.
I think you need to copy the specific file to the clickOnce folder.
Edit the .manifest and .application files with MageUI.
Advance the version number in both files.
Not sure about this but the ClickOnce at client side is expected to download the file that was changed.
ClickOnce will determine the updated dlls for you, your clients won't have to download the full 150MB but only the updated ones. Only downside is you still have to upload all the 150MB.
I have a ClickOnce Application at my Customer that works that way, about 40MB always remains the same. No extra work required.
Assuming you are working in the live environment on the clients system you should be able to replace a dll by copying it over the previous dll in the installation folder. I think the location of clickonce installations on Windows XP is C:\Documents and Settings\userprofile\Local Settings\Apps.