Click here to Skip to main content
12,951,971 members (56,640 online)
Click here to Skip to main content
Add your own
alternative version


19 bookmarked
Posted 6 Oct 2008

Share Resources Across Multiple Projects

, 6 Oct 2008 CPOL
Rate this:
Please Sign up or sign in to vote.
Centralize your resources into a single module and export them in an organized, controlled way.


In VS 2005 and earlier, resources were flagged as Friend; this meant that, you could use them globally within the project, but could not make them directly available to outside projects. VS 2008 allows you to make resources Public, but this applies to all resources, and namespace issues can make this a bit tricky. If you use a static class, however, resources can be exported in a controlled, organized, and easy to maintain fashion.


I have been working on a large application organized into several projects. One of these is the "core" project, which holds various toolboxes, custom controls, etc. I wanted to put all of the app's icons and images here, too.

We started out using VS 2005, which does not allow the resources of a project to be shared. The workaround turned out to be pretty simple: export the resources using a static class.

After switching to VS 2008, my team decided to stick with using this export class. The structure allowed to pick which resources would be made public, to organize the resources into logical groupings, and to alias resources to show how they are to be used. The aliasing has proven especially useful, as it has allowed us to change an image in only two places -- the resource file and the exporting class -- and leave the rest of our code alone.

The Theory

In the accompanying solution, there is a code module named Shared. This defines the namespace SharedResources, which contains three classes: Icons, Images, and Strings. These classes export icon, image, and string resources, respectively, by using read-only properties. This is what the Images class looks like in VB:

Public Class Images

    Public Shared ReadOnly Property Leave() As Image
            Return My.Resources.Leave
        End Get
    End Property

    Public Shared ReadOnly Property Page() As Image
            Return My.Resources.Page
        End Get
    End Property

    Public Shared ReadOnly Property Report() As Image
            Return My.Resources.Page
        End Get
    End Property

    Public Shared ReadOnly Property User() As Image
            Return My.Resources.User
        End Get
    End Property

End Class

In C#:

using SharingResources_CS.Properties;
using System.Drawing;

public class Images
public static Image Leave

        get { return Resources.Leave; }

    public static Image Page
        get { return Resources.Page; }

    public static Image Report
        get { return Resources.Page; }

    public static Image User
        get { return Resources.User; }

You can see that the resource Page is exported under two different aliases, as Page and as Report. If we ever wanted to change the Report image, all we would need to do is add the image to the project, then reference it in the Images class.

We could have further broken this down in to additional classes, say, small images for use in menus and toolbars, and large images for panel backgrounds; the Strings class can be divided up into strings for menus, strings for message boxes, and strings for help text.

The Example Solutions

I have written two example solutions, one in VB and one in C#, using VS 2008. Each solution contains two projects. The first one implements the SharedResources namespace. The second initializes a form's menu and title from the exported resources.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Gregory Gadow
Software Developer (Senior)
United States United States
Gregory Gadow is currently a student at Central Washington University, studying for a B.S. in Actuarial Science with plans to graduate in June, 2019. He has been writing code for almost 30 years in more than a dozen programming languages. Previously, he worked for a mid-size brokerage firm as the company's programming department doing VB6, VB.Net, ASP, HTML, XML and SQL. He also held the Series 7 and Series 66 brokerage licenses.

You may also be interested in...


Comments and Discussions

QuestionI'm looking for more :'( Pin
Member 1249599511-Jan-17 5:21
memberMember 1249599511-Jan-17 5:21 
GeneralMy vote of 5 Pin
FernandoUY8-Jun-12 19:45
memberFernandoUY8-Jun-12 19:45 
GeneralMy vote of 5 Pin
hoernchenmeister7-Nov-10 21:25
memberhoernchenmeister7-Nov-10 21:25 
GeneralMy vote of 5 Pin
hoernchenmeister7-Nov-10 21:25
memberhoernchenmeister7-Nov-10 21:25 
GeneralThis really helped Pin
Member 152936617-Feb-10 19:24
memberMember 152936617-Feb-10 19:24 
GeneralPerfect Pin
bar49_9#11-Aug-09 8:36
memberbar49_9#11-Aug-09 8:36 
Generalcongratulations, the simply normally is the best option Pin
juliotrujilloleon13-Oct-08 22:59
memberjuliotrujilloleon13-Oct-08 22:59 
QuestionI wonder why this is not possible in 2005? Pin
Dinesh Mani7-Oct-08 3:24
memberDinesh Mani7-Oct-08 3:24 
AnswerThis technique allows you to control which resources are exposed, and to alias your resources Pin
TechBearSeattle7-Oct-08 3:58
memberTechBearSeattle7-Oct-08 3:58 
GeneralRe: This technique allows you to control which resources are exposed, and to alias your resources Pin
Dinesh Mani7-Oct-08 5:14
memberDinesh Mani7-Oct-08 5:14 
GeneralCreating strongly typed resource wrappers Pin
mav.northwind6-Oct-08 19:15
membermav.northwind6-Oct-08 19:15 
GeneralShare Resources Across Multiple Projects Pin
Member 41287956-Oct-08 11:33
memberMember 41287956-Oct-08 11:33 

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

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

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170525.1 | Last Updated 6 Oct 2008
Article Copyright 2008 by Gregory Gadow
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid