|
Hello everyone,
I want to embed a resource file (xml file) into a DLL assembly and access the xml file from the DLL.
But I can not find sample code for me to do this. All samples I could find is dealing with embed and access image in resource file. Could anyone show me a sample please?
thanks in advance,
George
|
|
|
|
|
It's XML so just store it as a string. You don't need anything fancier than that. However, if you add a settings file and add it to there, you'll be able to change it by changing it in the config file ( although as it's an XML file, you may need to encode it, or put it in a CDATA section )
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
Thanks Christian!
If I have already added an XML file into my project, how to make it into a resource file into the final DLL assembly?
regards,
George
|
|
|
|
|
Assembly assembly = Assembly.GetExecutingAssembly();
string[] resources = assembly.GetManifestResourceNames();
Stream s = assembly.GetManifestResourceStream("YourResourceName")
|
|
|
|
|
Thanks Navaneeth,
Stupid question. If I have already added an XML file into my project, how to make it into a resource file into the final DLL assembly?
regards,
George
|
|
|
|
|
Select the XML file, in the properties there is an option to make it embedded. I don't remember the name exactly.
|
|
|
|
|
Thanks Navaneeth!
1.
I find this item. Do you mean this -- Build Action --> Embedded Resource?
2.
What is the differences between Build Action --> Embedded Resource and Build Action --> Resource?
regards,
George
|
|
|
|
|
Choose the property for that file, select "Build Action" as "Embedded Resource"
|
|
|
|
|
Thanks Navaneeth,
There is another option called resource other than embedded resource. What is the differences?
regards,
George
|
|
|
|
|
|
Thanks Navaneeth!
1.
I have tried your samples but not working. Maybe I made something wrong. Here is my code.
I have a DLL and in the DLL I load resource by using the following statements,
XMLFile1.xml is a resource file for the DLL project and I mark it as embedded resource from build action. The issue I met with is s always return null when executing the following statements.
Anything wrong or any ideas to debug further?
Assembly assembly = Assembly.GetExecutingAssembly();
string[] resources = assembly.GetManifestResourceNames();
Stream s = assembly.GetManifestResourceStream("XMLFile1.xml");
2.
I read the link below you recommended, but still confused about what means Resource. Here is the description from the page -- " embeds the file in a shared (by all files in the assembly with similar setting) assembly manifest resource named AppName.g.resources.", but when I mark the XML file to be Resource other than a Embedded Resource from buuld action, there is no file called AppName.g.resources generated. Any ideas?
http://stackoverflow.com/questions/145752/what-are-the-various-build-action-settings-in-vsnet-project-properties-and-what[^]
regards,
George
|
|
|
|
|
George_George wrote: Anything wrong or any ideas to debug further?
Yes. When you embed resources via visual studio, it appends the namespace name along with the resource name. Assume your resource (XMLFile1.xml) is in namespace SampleNameSpace , then your resource name would be embedded in assembly like SampleNameSpace.XMLFile1.xml . So to get your code working, change it to
Assembly assembly = Assembly.GetExecutingAssembly();
Stream s = assembly.GetManifestResourceStream("SampleNameSpace.XMLFile1.xml"); Note : the namespace name and file name is case sensitive
You can embed resources without the namespace prefix if you are using command line.
csc /resource:XMLFile1.xml YourClass.cs but it is very tough to use.
George_George wrote: I read the link below you recommended, but still confused about what means Resource
Honestly, I don't know and I'd suggest not to break your head by thinking about such a small thing. Be productive and write code instead of thinking about trivial things like this.
|
|
|
|
|
Thanks Navaneeth,
I did search for a whole day during my relax time but find no solutions. I am not sure in C# we must include resource file into the same assembly where code resides. Any ideas?
regards,
George
|
|
|
|
|
Several my application show how to access embedded resources. For example this one: Convert MP3 to EXE[^]
|
|
|
|
|
Thanks Giorgi,
I have followed your patterns and it works. I have another question, is it possible to put resource into another separate file, and during runtime the DLL could finds and loads the separate resource file?
regards,
George
|
|
|
|
|
I am not sure as I have never done that. Looking at the method I don't think it is possible to specify the resource file that has the file embedded.
|
|
|
|
|
Thanks Giorgi!
There is another build action option called resource other than embedded resource. What is the differences?
regards,
George
|
|
|
|
|
I am not sure, I just tried it and there was only 'embedded resource', not resource. Strange.
|
|
|
|
|
Are you using Visual Studio 2008?
regards,
George
|
|
|
|
|
Yes, I am. The file is ico file.
|
|
|
|
|
I am using Visual Studio 2008 VSTS version, could you try an XML file resource please?
regards,
George
|
|
|
|
|
I am using VS Professional Edition. I just tried it with xml file but still there is no resource. No idea what's going on.
|
|
|
|
|
|
Yes, perhaps there is a difference. I have no idea what it can mean as I have never seen it. What type of project do you have? WPF? Winforms? ASP.NET?
|
|
|
|
|
Just a normal console application.
Any ideas why you have different GUI?
regards,
George
|
|
|
|