我有类库项目,它创建了一个我动态加载到我的主应用程序中的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。 有没有办法加载图像而不必将其放在主应用程序项目中?
答案 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