簡體   English   中英

從動態加載的程序集中加載嵌入式資源

[英]Load Embedded Resources from dynamically loaded assemblies

我有一個類庫項目,該項目創建一個動態加載到主應用程序中的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的引用。 有沒有一種方法可以加載圖像而不必將其放入主應用程序項目中?

您可以使用以下解決方法:

將圖像添加到類的資源時(我的意思是在類的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 :)

希望這可以幫助

使用構建操作“資源”而不是“嵌入式資源”解決了該問題。

“當您要使用uri鏈接到資源時,資源用於WPF應用程序。嵌入式資源是WinForms應用程序的嵌入式資源,應通過ResourceManager進行訪問。” https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/29b6d203-18fb-40b0-a01f-d5b787ccf3be/build-action-resource-vs-embedded-resource?forum=netfxbcl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM