C# 如何从另一个程序集打开标记为“资源”的文件?

C# 如何从另一个程序集打开标记为“资源”的文件?,c#,wpf,reflection,resources,C#,Wpf,Reflection,Resources,我正在尝试创建一个插件系统,在其中动态加载位于特定文件夹中的程序集。我需要做的一件事是加载插件程序集中标记为“资源”的文件 我的一个用例是尝试获取存储的图标。我现在得到的是: Assembly assembly = Assembly.LoadFile("ThePlugin.dll"); Uri fullPath = new Uri("pack://application:,,,/" + assembly.GetName().Name + ";component/" + path.TrimStar

我正在尝试创建一个插件系统,在其中动态加载位于特定文件夹中的程序集。我需要做的一件事是加载插件程序集中标记为“资源”的文件

我的一个用例是尝试获取存储的图标。我现在得到的是:

Assembly assembly = Assembly.LoadFile("ThePlugin.dll");
Uri fullPath = new Uri("pack://application:,,,/" + assembly.GetName().Name + ";component/" + path.TrimStart('/'), UriKind.Absolute);
ImageSource image = new BitmapImage(fullPath);
我尝试将插件中图像文件的构建操作设置为“资源”、“内容”,我尝试启用“复制到输出目录”,但到目前为止,这些方法都不起作用。我总是遇到一个例外,图像文件找不到

但是,使用上述方法适用于主机程序集assembly=assembly.getExecutionGassembly

我怀疑,因为我没有引用宿主项目中的插件程序集,所以它无法解析Uri

我做错了什么


我还考虑实现一种获取资源的替代方法:拥有一个插件可以实现的接口,然后使用该接口获取资源。

当插件程序集中包含的图像文件标记为资源时,这种方法对我有效,即使没有引用插件程序集。除了Assembly.LoadFile需要一个绝对路径之外,我最终做了不同的事情:我将资源文件存储在resx文件中,而不是项目中。通过这种方式,我可以使用ResourceManager加载它们。