Link to home
Start Free TrialLog in
Avatar of Mister_Spock
Mister_SpockFlag for United States of America

asked on

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.
Avatar of joriszwaenepoel
joriszwaenepoel
Flag of Belgium image

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?
Avatar of Mister_Spock

ASKER

How do I get the DLL Assembly though, I've tried both namespaces with no luck.
ASKER CERTIFIED SOLUTION
Avatar of joriszwaenepoel
joriszwaenepoel
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
500 points is not enough....thank you very much.