Click here to Skip to main content
Click here to Skip to main content

Using Resource-only Assemblies with C#

, 17 Apr 2002
Rate this:
Please Sign up or sign in to vote.
This note describes how to use resource-only assemblies with C# in the context of a multi-assembly project.

Introduction

This article describes a technique that can be used in order to use resource-only assemblies within a multi-assembly project. I'm assuming that the reader is familiar with basics of assemblies and resource management under .NET. A good introduction in this topic can be found in "Resources and Localization Using the .NET Framework SDK", .NET framework tutorial.

The tutorial describes the technique of using resource files that are embedded within the application (or assembly):

using System.Resources;
[...]
ResourceManager rm = new 
  ResourceManager("MyNamespace.MyStrings", this.GetType().Assembly); 
string someString = rm.GetString("SomeString");

In the above example we're creating an instance of ResourceManager class. This instance will allow access to the "Strings" resource file. The second parameter specifies the assembly that embeds the resource. In this case we're specifying the assembly that contains this class. As the second line illustrates, once the resource manager is created, it can be used to get strings or objects from the resource.

So what if the resource you're trying to use is defined in some other assembly? This case is frequent in lager projects, where the code base is separated in multiple modules. Many projects may benefit from locating its resources in separate resource-only assemblies. The sample code in this article includes two projects: a simple console application and a resource-only library. The code demonstrates how the console application accesses strings stored in the resource-only library.

In order to create ResourceManager that corresponds to the resource in the different assembly, we need to specify the reference to the resource assembly as the second parameter in the constructor. Unfortunately Assembly class cannot return the assembly reference based on the resource name. To work around this problem, we first need to create a dummy ResLibraryClass class within resource assembly ResLibrary. Now we can use the dummy class in order to obtain the reference to the resource assembly by using typeof(ResLibraryClass) operator:

using System.Resources;
[...]
ResourceManager rm = new ResourceManager("ResouceSamlpe.Strings",
                     Assembly.GetAssembly(typeof(ResLibraryClass))); 
string someString = rm.GetString("string1");

Here we're using static GetAssembly method in order to obtain the reference to the assembly that embeds the resource. Also, note that you must supply the name of the resource file with its namespace, even if both the calling code and the resource file share the same namespace.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Alexis Smirnov
Web Developer
Canada Canada

Comments and Discussions

 
QuestionCrystal Reports & resource manager Pinmemberib0004221-Jun-07 1:17 
GeneralVery helpful article. And a hint for vs 2005 users PinmemberLu Yixiang16-May-07 18:17 
GeneralGood one dude PinmemberITstud29-Mar-07 21:27 
QuestionHow to avoid hard coded strings PinmemberChakravarthy Sayani5-Mar-07 5:51 
AnswerRe: How to avoid hard coded strings PinmemberLeblanc Meneses7-Mar-07 21:40 
AnswerRe: How to avoid hard coded strings Pinmembercisjokey11-Dec-08 23:54 
QuestionAvoiding hardcoding PinmemberMember #23452545-Mar-07 5:50 
QuestionIs this not a better way? PinmemberNPow6-Feb-06 11:22 
General.resX and .resource files Pinmembergordingin29-Jan-04 6:52 
GeneralRe: .resX and .resource files PinmemberSantosh M. P.8-Feb-04 23:55 
GeneralSource code updated Pinmemberalexis18-Apr-02 5:01 
GeneralPlease FIX this PinmemberBen Kloosterman17-Apr-02 17:32 
GeneralCannot open demo project PinmemberDeyan Petrov16-Apr-02 22:33 
GeneralRe: Cannot open demo project Pinmemberdiptidjadhav30-Jun-07 2:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.141216.1 | Last Updated 18 Apr 2002
Article Copyright 2002 by Alexis Smirnov
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid