在c#中使用反射来访问My.Resources

本文关键字:访问 My Resources 反射 | 更新日期: 2023-09-27 18:14:02

我继承了一个用c#和VB混合编写的大型项目。净

该项目涉及许多独立的组件。

有数百(或数千)的资源(png文件)已被插入到使用VB的项目。资源功能,我想从一些c#代码访问,在一个不同的程序集。

微软对此有一篇知识库文章。它包括一些示例代码,但我无法使其工作(并且我不能完全遵循代码)。

// Gets a reference to the same assembly that 
// contains the type that is creating the ResourceManager.
System.Reflection.Assembly myAssembly;
myAssembly = this.GetType().Assembly;
// Gets a reference to a different assembly.
System.Reflection.Assembly myOtherAssembly;
myOtherAssembly = System.Reflection.Assembly.Load("ResourceAssembly");
// Creates the ResourceManager.
System.Resources.ResourceManager myManager = new 
    System.Resources.ResourceManager("ResourceNamespace.myResources", myAssembly);
// Retrieves String and Image resources.
System.String myString;
System.Drawing.Image myImage;
myString = myManager.GetString("StringResource");
myImage = (System.Drawing.Image)myManager.GetObject("ImageResource");

我不能遵循为什么代码创建myAssemblymyOtherAssembly,似乎从来没有使用第二个对象?

加载第二个程序集的动作是否…

myOtherAssembly = System.Reflection.Assembly.Load("ResourceAssembly");

…意思是当我创建一个ResourceManager ?

时,我不需要进一步引用它
System.Resources.ResourceManager myManager = new 
    System.Resources.ResourceManager("ResourceNamespace.myResources", myAssembly);

任何想法如何我可以访问这些资源(有或没有反射)将非常感激!

在c#中使用反射来访问My.Resources

试试这个示例

http://msdn.microsoft.com/en-us/library/yfsz7ac5.aspx

当你说加载myOtherAssembly意味着你以后不必引用它时,你是对的。其实你并不需要声明一个局部变量来实现。

我不知道为什么它不起作用。您确定资源名称空间正确吗?如果您在ResourceManager实例化之后添加了一个断点,那么您可以在调试器中看到其中的任何资源吗?