从动态加载的程序集加载嵌入式资源

时间:2018-05-04 18:05:26

标签: c# wpf uri embedded-resource bitmapimage

我有类库项目,它创建了一个我动态加载到我的主应用程序中的DLL。主应用程序包含我使用的API调用,其中一个调用是将图标图像加载到WPF按钮中。我提供"pack://application:,,,/NamespaceOfMyDll;Component/Resources/embeddedresource.ico" 作为我的URI源,以下是尝试加载此图像的代码

var logo = new BitmapImage();
 logo.BeginInit();
 logo.UriSource = new Uri(source);
 logo.EndInit();

图像是我正在加载的dll的嵌入资源。执行此操作会抛出异常,说明找不到源。 尝试加载图像的项目没有引用我正在加载的dll。 有没有办法加载图像而不必将其放在主应用程序项目中?

2 个答案:

答案 0 :(得分:0)

以下是您可以使用的解决方法:

当您将图像添加到类的资源(我的意思是在类的Resources.resx文件中)时,为您要添加/要访问的每个资源创建公共变量。样本:

 public static class TestClass
{
public static Bitmap Image1 { get { return Resource1.Image1; } }
public static Bitmap Image2 { get { return Resource1.Image2; } }
}

现在,让我们继续将.dll加载到主项目中:

Assembly Mydll = Assembly.Load("dll path here");
Type MyLoadClass = MyDALL.GetType("dllAssemblyName.ClassName"); 
object obj = Activator.CreateInstance(MyLoadClass);

现在,尝试访问Bitmap变量:

Bitmap img1 = (Bitmap)obj.GetType().GetField("Image1").GetValue(obj);

///use the bitmap the way you want :)

希望这有帮助

答案 1 :(得分:0)

使用构建操作“资源”而不是“嵌入式资源”解决了这个问题。

“当您想使用uri链接到资源时,资源用于WPF应用程序。嵌入式资源是应该通过ResourceManager访问的WinForms应用程序的嵌入式资源。” https://social.msdn.microsoft.com/Forums/vstudio/en-US/29b6d203-18fb-40b0-a01f-d5b787ccf3be/build-action-resource-vs-embedded-resource?forum=netfxbcl