2012-09-17 74 views
1

我试图动态加载资源文件夹中的图像,但由于某种原因GetManifestResourceStream返回null。这是我写的:访问活动程序集资源

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

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

  1. 获取与装载
  2. 加载与加载组装成位图

如何图像可以这样做的所有组件的列表?

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

如果将文件的构建操作属性设置为Embedded Resource,则两个版本(GetExecutingAssembly和GetCallingAssembly)都可以使用。 – Rocshy

回答

1

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

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

回答您的问题上面:

  1. 获取列表与装载

使用AppDomain.GetAssemblies方法的所有组件,例如:

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); 
  1. 负载的图像对应于所述加载组件插入位图通过寻找使用GetManifestResourceStream该资源的组件

迭代。

+0

根据ildasm,资源名称是正确的。它可以是别的吗? – Rocshy

+0

@RoxanaDinca答案已相应更新。 – akton