Warning: String asset reference is in short form, could not be resolved

Since “updating” to 4.17 I ran into a number of bad problems. I fould workarounds for most except for this one.

When starting my project, particularly when loading one of my characters I get the following “warnings” in the log window

LogBlueprintUserMessages: [GenesisMale_C_14] switching to LOD 0
LogPackageName: Warning: String asset reference "None" is in short form, which is unsupported and -- even if valid -- resolving it will be really slow.
LogPackageName: Warning: Please consider resaving package in order to speed-up loading.
LogPackageName: SearchForPackageOnDisk took   0.265s, but failed to resolve None.
LogPackageName: Warning: String asset reference "None" could not be resolved.
LogPackageName: Warning: String asset reference "None" is in short form, which is unsupported and -- even if valid -- resolving it will be really slow.
LogPackageName: Warning: Please consider resaving package in order to speed-up loading.
LogPackageName: SearchForPackageOnDisk took   0.266s, but failed to resolve None.
LogPackageName: Warning: String asset reference "None" could not be resolved.

Theres only this one character on the screen so it most be something with it. I tried to resave all assets, BPs, meshes, textures and so on, but to no avail. I get this warning every renderframe and due to the 0.2 second delay my framerate is currently in at an unplayable value.

Somebody else reported this here link text without any luck.

I need to find out what is causing the error and how to fix it ASAP, or my program is basically dead.

Thank you for your consideration

PS: No, I can not reproduce it on a clean project, so we can skip that step.

I had to revert to 4.16.3 to be able to do any work. Unless I can find out what causes this message, Unreal update is dead for me since future versins will likely have the same bug.

Probably it is something that can be fixed by re-saving, but there must be info in the warning where that string asset is referenced. Alternatively I would imagine that, if the asset in question is “none” there should be no warning at all.

I got the same problem while creating a widget (4.17.2):

LogPackageName: Warning: String asset reference "None" is in short form, which is unsupported and -- even if valid -- resolving it will be really slow.
LogPackageName: Warning: Please consider resaving package in order to speed-up loading.
LogPackageName: SearchForPackageOnDisk took   0.090s, but failed to resolve None.
LogPackageName: Warning: String asset reference "None" could not be resolved.
LogPackageName: Warning: String asset reference "None" is in short form, which is unsupported and -- even if valid -- resolving it will be really slow.
LogPackageName: Warning: Please consider resaving package in order to speed-up loading.
LogPackageName: SearchForPackageOnDisk took   0.086s, but failed to resolve None.
LogPackageName: Warning: String asset reference "None" could not be resolved.

Ok! I found what caused that error on my side (see screenshot). Item Slot is a structure. Wires were not connected. As soon as I connected - that warning disappeared.

Thanks, but there is nothing of the sort in my program I can find.
As long as there is no help from Epic, that is the end of the line for me.

I mean, come on, Epic you make a change somewhere in the code that breaks the program for some of us and we don’t even get an acknowledgement in 6 days?

All we need is some meaningful output when you generate that error where it comes from, the blueprint name alone would be helpful. the message as it is it absolutely useless.

Can somebody from the team please respond?

While Epic is looking at it (hopefully), have you tried to debug it through visual studio?
Another option I would recommend is to make a copy of your project and start deleting code until you find a spot that causes it.

Yes, I got that idea myself today and spend all night slashing objects and code from my scene until I finally nailed down the location where this happens. Needless to say that the code has not changed between 4.16 and 4.17 and it worked with 4.16.
I also can not see what is wrong here. I post screenshots that show the location. I am convinced this must be classified as a bug since I tried everything I could think of here and was not able to get rid of the error.

At the core is structure that is defined like this:

I have an array of these structures that I use to store the game assets that are loaded during the game but for this test I have cut all that out and reduced it to the bare minimum. I have a function that returns a structure of this type. For now I cut out all the fancy stuff and just return an empty structure

And then I call that function in the tick function here:

The purpose of the whole thing is to check if the clothing or equipment on the character has changed, then load the respective clothing items and put them on the character. Normally the function would search the array for the clothing item with the given ID and return the structure from the array with the data, in case nothing is found, an empty structure would be returned just like here.

I tried to add dummy references to the mesh and skeleton field by referencing existing assets, but the result is the same.

So and there you have it. There is no string reference anywhere and yet this code generates the error under 4.17 while it didn’t under 4.16 and I have no idea why.

Epic, I hope you can figure out what’s going wrong here

I did some lookup in C++ code: It does not look at string reference.
String asset reference “None” - means that there is a referenced asset, but its path is empty. This is where your error is coming from.

FString FPackageName::GetNormalizedObjectPath(const FString& ObjectPath)
{
	if (!ObjectPath.IsEmpty() && FPackageName::IsShortPackageName(ObjectPath))
	{
		FString LongPath;

		UE_LOG(LogPackageName, Warning, TEXT("String asset reference \"%s\" is in short form, which is unsupported and -- even if valid -- resolving it will be really slow."), *ObjectPath);
		UE_LOG(LogPackageName, Warning, TEXT("Please consider resaving package in order to speed-up loading."));
		
		if (!FPackageName::TryConvertShortPackagePathToLongInObjectPath(ObjectPath, LongPath))
		{
			UE_LOG(LogPackageName, Warning, TEXT("String asset reference \"%s\" could not be resolved."), *ObjectPath);
		}

		return LongPath;
	}
	else
	{
		return ObjectPath;
	}
}

Try to explicitly set your “skeletal” / “asset id for loading” members. Probably that error is coming from there.

BTW, I noticed starting with 4.16 a lot of changes I had to make into my C++ code. With 4.17 not as much as from 4.15 to 4.16 compliance, but still. Also in 4.17 some of my blueprints in older project are also giving me the same exact problem (String asset reference “None”).

Another option to test would be to make a new structure with integers only. Test it, then add skeletal mesh ref, test, then add asset id.

Yes I made a test project with the same type of structure etc. The culprit is clearly the last field in the structure the “Soft Object Reference”.
When I leave that empty it causes the error, when I give a dummy object from the test project (SK_Mannequin) it does not return the error.
The problem is, I am trying to load objects on demand during the game without preloading them all when I dont need them. Up to now, this worked well. I have a static array where all my assets are referenced. I can probably work around this problem by checking if anyting is waiting to be loaded and then only call the load function where there is something to be returned, thus avoiding the empty return, but surely it is bad coding practice to change stuff like that in an engine that breaks exisiting project without even a warning or so. I mean it would be easy for them to generate a meaningful warning that allows us to figure this out and change our code without 2 days of detective work.
Without your above hint I would never have figured that ouot because I was looking for an empty reference to a string and couldn’t see any. I never thought that “string reference” means the path of a skeletal mesh in this case. These messages could be better.

yeah, that is true. Sometimes messages from the Engine could be misleading. Most of the times I have to go to the Engine’s sources to get down to it.
But on another note, I see what Epic is doing: they are placing extra checks that were omitted before and making the code more reliable at the end. I know it is majorly sux and frustrating when a fully working code in older versions worked, but that probably was causing some performance or reliability issues in another places.

Anyway, thanks for your input, i would have had a hard time finding a workaround without your hints.
Looks like Epic isn’t giving a ■■■■ about this problem, none of them has seen fit to even respond to this bug report.
Luckily now I can caontine to use the new UE versions, though I will most likely skip 4.17 since 4.18 is right around the corner. Might as well do the changes that come with that one together with this one