views:

330

answers:

2

I have a C# class library that contains several resources files organized in folders. Since I want the generated classes to be all in the same namespace I'm setting the CustomToolNamespace property of each resource file.

However I discovered through Reflector that although the classes are all being generated in the same namespace the path to the embedded resources contains the directory name in which the resource file is placed.

For example in a project where FolderCustomNamespaceRes.resx is placed inside a directory named Folder.

Visual Studio Project Structure

And where CustomToolNamespace for FolderCustomNamespaceRes.resx is set to PublicResourcesTest, Reflector shows that the path to the embedded resource assembly is PublicResourcesTest.Folder.FolderCustomNamespaceRes.resources

Reflector View

Is this a bug or am I missing something?

A: 

This is done automatically by the IDE so it's not a bug, but unfortunately the only way it appears you can suppress this behaviour is by using ReSharper as outlined here.

lee-m
That ReSharper option is not applicable to the case in hand. Resource generation is controlled by a custom tool provided by Visual Studio.
João Angelo
A: 

After some search I found out that the manifest name of the embedded resource can be controlled by adding metadata in the .cspproj file.

Before you would have something like:

<EmbeddedResource Include="Folder\FolderCustomNamespaceRes.resx">
   <Generator>PublicResXFileCodeGenerator</Generator>
   <LastGenOutput>FolderCustomNamespaceRes.Designer.cs</LastGenOutput>
   <CustomToolNamespace>PublicResourcesTest</CustomToolNamespace>
</EmbeddedResource>

And to control the manifest name you would have to add:

<EmbeddedResource Include="Folder\FolderCustomNamespaceRes.resx">
   ....
   <LogicalName>$(RootNamespace).FolderCustomNamespaceRes.resources</LogicalName>
</EmbeddedResource>
João Angelo