After banging my head against a brick wall for a bit, I finally realized that when embedding assets in ActionScript3 files the path to the embedded asset is relative to the location of the .as file in which the embed statement is placed and not relative to my MXML or AS application entry point. If you look at the image below you’ll note that the embed statement has to traverse up the package structure (3 levels) before pointing to the required graphical asset.

It’s a bit strange that the compiler isn’t smart enough to establish a top level path to assets based on the application entry point, but maybe I’m missing something.
Simon Cave points out in the comments, “You can use an absolute path (which is actually relative to the project directory) by starting your reference with a forward slash.” Here’s what that looks like:

2 Comments
You can use an absolute path (which is actually relative to the project directory) by starting your reference with a forward slash, like this:
/assets/MediaIcons.swf
I simplify my resource usages by having an AssetManager class that takes care of all my embeds.
package {
public final class AssetManager {
[Embed (source="/assets/myicon.png" )]
public static const ICON_MYICON:Class;
}
}
Then just use it the same as normal, but with the asset manager class in front of it :
var icon:Bitmap = new AssetManager.ICON_MYICON();
addChild( icon );