• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 289
  • Last Modified:

C#: Embedded files

I have been racking my brain to solve this problem. I have two C# application.

1: CSharpUtilityBelt (Class Library built into a DLL)
2: ConsoleApplication1 (Built into an EXE)

In the class library I have added a XML file and set it to embedded resource. Then in ConsoleApplication1 I referenced CSharpUtilityBelt. I have been looking for ways to get to the embedded resource, here is what I found.

"Do you want the data in the file or the filename? I use the following to
access the contents of an embedded file:

Stream stream =
Assembly.GetExecutingAssembly().GetManifestResourc eStream(name);

Note that the name needs to include the default namespace for the[/color][/color]
project.[color=blue][color=green]
e.g. If the default namespace was My.Namespace and the file with its[/color][/color]
build[color=blue][color=green]
action set to "Embedded Resource" was called TextFile1.txt then you'd[/color][/color]
need[color=blue][color=green]
to pass "My.Namespace.TextFile1.txt" to GetManifestResourceStream().

You can check what the name to use for a built assembly by loading the
assembly into ildasm.exe, opening the manifest, and looking for the[/color]
relevant[color=green]
.mresource entry.

 e.g.


 .mresource public My.Namespace.TextFile1.txt
{
}"

Here is my code in ConsoleApplication1:

System.IO.Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(ConsoleApplication1.TestXMLFile.xml);

I tried the namespace ConsoleApplication1.TestXMLFile.xml and CSharpUtilityBelt.TestXMLFile.xml. Eitehr way I get the error "The type or namespace name 'TestXMLFile' does not exist in the namespace 'ConsoleApplication1' (are you missing an assembly reference?)". I do not know what to do next.
0
Mister_Spock
Asked:
Mister_Spock
  • 2
  • 2
1 Solution
 
joriszwaenepoelCommented:
Since the XML file is embedded in de dll, I think you need to get it from within the dll as well.
You say you do it from your ConsoleApplication1, so GetExecutingAssembly will return the assembly for the Console Application and not the dll-assembly.

Can you try to move that code to a function in the dll, and then call that function from the Console application?
0
 
Mister_SpockAuthor Commented:
How do I get the DLL Assembly though, I've tried both namespaces with no luck.
0
 
joriszwaenepoelCommented:
You should move the code

System.IO.Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("CSharpUtilityBelt.TestXMLFile.xml");

to a function inside the dll.  
Then GetExecutingAssembly should return the DLL assembly (since that one is executing at that moment).
Note that the name of the manifest resource is case sensitive.
0
 
Mister_SpockAuthor Commented:
500 points is not enough....thank you very much.
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now