Why is the EngineAssociation GUID different for each team member?

We compile one custom UE4 engine build that is distributed to all our team members via rsync.

However, whenever someone wants to open our .uproject, the editor states that the project needs to be upgraded, and saves a new .uproject with a different GUID for “EngineAssociation”.

This ends up causing a lot of problems (conflicts, confusion about which version is correct, copies of project folders etc.).

How can we avoid this and keep the GUID the same as long as everyone is running the same editor?

We are distributing the compiled engine. It sits in a folder called ‘DMSUnreal/’, and next to that folder is an ‘Assets/’ folder that has our own .uproject files.

So far I’ve tried to create various .uprojectdirs files based on what I read in .uproject file's EngineAssociation saves a GUID, which causes problems for teams using UE4 source code - Character & Animation - Unreal Engine Forums but that hasn’t brought any improvements.

Next I will likely write a specific GUID to the registry so it’s consistent among team members. It seems odd to me that a GUID identifying the engine would not be unique and stored with the engine, but generated on the fly on each machine.

Hello TTimo,

When you distribute the engine to your team members, are you distributing the built engine or is each member having to compile it themselves after syncing? Also, are they syncing the project as well, including the .uproject file itself?

Have you tried using the IDesktopPlatform::SetEngineIdentifierForProject function to set the value as this page suggests? It seems that from reading this page, unless that is set, then the random GUID is intended.

As I understand this would have the same result as what is already happening, each install having a different .uproject with the local GUID that was generated. So that doesn’t appear to be a solution. Next I work on this I will look at enforcing the same GUID across all installs.

Have you had a chance to try the solution that you proposed? I would be interested to know if it worked. I’m continuing to look into the issue on my end in the meantime.

Yes, we write the same GUID to the registry as part of the build download and install, and it works. No more conflicted project files or project copies.

Hi TTimo, Just wondering what the process was for this? I am doing something similar and am getting the same conflicts. Essentially I am distributing a packaged exe to my teammates who use that to run the editor. But as you said, the engine association keeps changing. How did you fix it? Thanks!

I am not sure what you are asking.

This is the bit of python code I wrote that sets the key in the registry:

That way when opening the .uproject, the embedded GUID is looked up in registry, and the right path is found.

1 Like

Another follow on question - do you keep the same GUID throughout your entire project, or are you altering slightly every time you deploy a new version?

Yes, we generate a new GUID every time we transition the team over to a new UE4 build. The project file gets the new GUID at the same time.

Why not generate a unique ID per build and use that as the identifier across all installations of the same build?

I’m using the __DATE__ and __TIME__ macros to generate a seed and create the ID from that, and it’s working pretty well so far.

Whenever we build a new version of the engine, the ID changes. The uproject is updated with the new ID on a programmer’s computer and the game modules are rebuilt and pushed to version control alongside the new uproject. Next time the team members pull the changes they receive a warning telling them the project was opened with a different version of the engine, and then they know they should update their engine installation.