[MonoDevelop] Resource IDs
Andras Biczo
abiczo@easymail.hu
Thu, 21 Apr 2005 02:29:58 +0200
This is a multi-part message in MIME format.
--------------080101060003090605080309
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
currently the resource ID of an embedded resource will be it's filename
in MD (at least for c# projects, I haven't checked the others).
This is different from what Visual Studio does. What VS does is
explained here:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbgrffileswithoutembeddedcultureinfostrings.asp
I think this is a better way of assigning the IDs because currently in
MD it can cause problems if you have two resources with the same
filename (e.g. res/small/logo.png, res/big/logo.png). Besides this, it
makes life easier for people that use MD and VS to work on the same project.
The patch I attached modifies the way MD assigns embedded resources' IDs
(only for c# projects). It works as follows:
1. If the resource file is "inside" the project base directory then its
ID will be its relative path with the directory separator character
replaced with '.'.
2. Otherwise it gets the same ID as before.
Would anyone please review the patch?
Thanks,
Andras
--------------080101060003090605080309
Content-Type: text/x-patch;
name="resource_id_naming.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="resource_id_naming.diff"
Index: Core/src/AddIns/BackendBindings/CSharpBinding/CSharpBindingCompilerManager.cs
===================================================================
--- Core/src/AddIns/BackendBindings/CSharpBinding/CSharpBindingCompilerManager.cs (revision 2468)
+++ Core/src/AddIns/BackendBindings/CSharpBinding/CSharpBindingCompilerManager.cs (working copy)
@@ -128,7 +128,13 @@
break;
case BuildAction.EmbedAsResource:
// FIXME: workaround 60990
- writer.WriteLine(@"""/res:{0},{1}""", finfo.Name, Path.GetFileName (finfo.Name));
+ string resourceId;
+ if(finfo.RelativePath.StartsWith ("." + Path.DirectorySeparatorChar)) {
+ resourceId = finfo.RelativePath.Substring(2).Replace (Path.DirectorySeparatorChar, '.');
+ } else {
+ resourceId = Path.GetFileName (finfo.Name);
+ }
+ writer.WriteLine(@"""/res:{0},{1}""", finfo.Name, resourceId);
break;
}
}
--------------080101060003090605080309--