如何在多个可执行文件中重用.NET资源?

时间:2010-05-14 02:19:31

标签: c# .net localization resources

我有一个现有的应用程序,我应该采取并创建一个“迷你”版本。两者都是本地化的应用程序,我们希望按原样重用主应用程序中的资源。所以,这是我的应用程序的基本结构:

MainApplication.csproj

/Properties/Resources.resx

/MainUserControl.xaml(使用Properties / Resources.resx中的字符串)

/MainUserControl.xaml.cs


MiniApplication.csproj

链接到MainApplication / Properties / Resources.resx

链接到MainApplication / MainUserControl.xaml

链接到MainApplication / MainUserControl.xaml.cs

MiniApplication.xaml(尝试使用MainApplication链接中的MainUserControl)

因此,总而言之,我在迷你应用程序中添加了主要应用程序作为链接所需的资源和用户控制。但是,当我运行迷你应用程序时,我得到以下异常。我猜它在使用不同的命名空间时遇到了问题,但我该如何修复?

  

无法找到任何资源   适合指定的文化   或中性文化。确保   \ “MainApplication.Properties.Resources.resources \”   被正确嵌入或链接到   汇编\“MiniApplication \”at   编译时间,或所有的   所需的卫星组件是   可加载和完全签名。

仅供参考,我知道我可以将用户控件放在用户控件库中,但问题是迷你应用程序需要占用空间小。所以,我们只想包括我们需要的东西。

2 个答案:

答案 0 :(得分:2)

你知道不同的命名空间是正确的。资源文件不能被赋予命名空间,它将占用包含它的文件夹的命名空间。如果两个应用程序中的命名空间不同,则命名空间将不同。

我可以看到三种选择

  1. 对两个应用程序使用相同的默认命名空间
  2. 只为您的资源文件准备一个程序集,并在两个应用程序中引用
  3. 在加载资源的代码中,根据加载它的类的命名空间生成命名空间

答案 1 :(得分:0)

visual studio生成的资源不是公共的,它们只对库中的类可见。为了生成资源作为公共属性,您需要使用这样的自定义生成器:http://www.codeproject.com/kb/dotnet/ResXFileCodeGeneratorEx.aspx