Sahuagin Sahuagin - 1 year ago 84
C# Question

Embedded Resource Name Loses Extension When File is Nested

I have some scripts stored in files that I've marked as Embedded Resource. I nest each of these files under their associated

file. Unfortunately, for some reason, when you nest a file this way, the embedded resource name loses the file extension. This means that at runtime I have no way to identify which embedded resources are or aren't scripts. What can I do about this?

One thing I tried that did not work: getting the
object, which has a
property. Unfortunately this property is

Another thing I tried was doubling up the extension. (like:
). This didn't work, and everything after the first
is still missing.

I tried naming the resource with something very different, and noticed that the resource name didn't even change. It seems that it is generating the resource name for a nested embedded resource file based off of the "dependent upon" file, which in this case is just a regular
file. I tried doubling the extension of the
file to
but the resource name still doesn't change. It insists on clipping everything after the first

No, ok, I see now that it is actually naming the resource after the type defined in the
file, not the filename of either file. This is why the extension makes no difference. This means there is nothing I can do to either filename to help find the resource.

Answer Source

The only thing I've found that worked is to manually edit the .csproj file and add a LogicalName tag, which allows you to override the resource name.

<EmbeddedResource Include="Path\To\NestedFile.ext">

Unfortunately, there is no IDE support for this, and the FileNesting extension I'm using doesn't support writing this tag either.

It's too cumbersome to have to do this for every file, so instead of relying on the file extension, I will have to add an identifier inside my script files that identifies them as scripts.

Ultimately I realized that since in my case I'm validating script files from unit tests, I can simply scan the file system instead of the resource manifest and avoid this problem altogether.