1

我正在尝试从 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. 将加载的程序集对应的图像加载到Bitmap中

如何才能做到这一点?

4

1 回答 1

1

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

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

要回答您的上述问题:

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

使用AppDomain.GetAssemblies方法,例如:

Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
  1. 将加载的程序集对应的图像加载到Bitmap中

使用 GetManifestResourceStream 遍历程序集以查找资源。

于 2012-09-17T12:27:34.653 回答