访问活动的程序集资源

时间:2012-09-17 12:24:16

标签: c# resources .net-assembly

我正在尝试从Resources文件夹动态加载图像,但由于某种原因,GetManifestResourceStream返回null。这就是我写的:

System.Reflection.Assembly asm;
asm = System.Reflection.Assembly.GetExecutingAssembly();
Bitmap bmp = new Bitmap(asm.GetManifestResourceStream("MyProject.Properties.Resources.Image.png"));

我已经尝试了我在这里找到的每一种方法,但它不起作用。路径是正确的,文件在那里。我需要动态执行此操作,因为根据用户权限,将加载不同的程序集。所以基本上我需要两件事:

  1. 获取包含所有已加载程序集的列表
  2. 将与加载的装配相对应的图像加载到位图
  3. 如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这通常意味着资源名称不正确。在ildasm中加载程序集,查看“.mresources”部分的清单并找到要加载的部分。

如果没有,对GetExecutingAssembly的调用将返回包含当前正在执行的代码的程序集,该程序集可能与包含该资源的DLL不同。请使用GetCallingAssembly从单独的DLL加载它。

回答上述问题:

  
      
  1. 获取包含所有已加载程序集的列表
  2.   

使用AppDomain.GetAssemblies方法,例如:

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
  
      
  1. 将与加载的装配相对应的图像加载到位图
  2. 中   

使用GetManifestResourceStream迭代查找资源的程序集。