从另一个程序集运行 WPF 应用程序

Posted

技术标签:

【中文标题】从另一个程序集运行 WPF 应用程序【英文标题】:Run WPF Application from another assembly 【发布时间】:2010-04-29 08:08:15 【问题描述】:

我想从另一个程序集“B”运行我的 wpf 应用程序“A”。

我使用以下代码:

static void main() 

  var app = new A.App();
  app.InitializeComponent();
  app.Run();

当我运行我的应用程序时,出现以下错误:

Cannot convert string '/Resources/icon.gif' in attribute 'Icon' to object of type 'System.Windows.Media.ImageSource'. Cannot locate resource 'resources/icon.gif'.  Error at object 'MainWindow' in markup file 'A;component/shell/shellview.xaml'.

如何从 B 图像和资源信息传输到 A? 谢谢!

【问题讨论】:

你最后用的是哪一个? 【参考方案1】:

您是否在使用 Pack URI?

您可以使用 pack URI 语法来访问嵌入在其他程序集中的资源。以下示例演示了用于访问其他程序集中的嵌入资源的基本包 URI 语法:

pack://application:,,,/;组件//

因此,如果您想在另一个名为 myAssembly 的程序集中的文件夹 myFolder 中找到名为 myPic.bmp 的文件,您将使用以下包 URI:

Pack://application:,,,/myAssembly;component/myFolder/myPic.bmp

与其他包 URI 一样,如果文件夹中不存在嵌入文件,则在 URI 中省略该文件夹。

尝试使用类似的东西:

<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="CustomControls.Controls;component\Themes/...."
/>
</ResourceDictionary.MergedDictionaries>

【讨论】:

以这种方式我必须修改我的 wpf 应用程序“A”中的所有资源引用。相反,如果有一种方法可以修改 A 使​​用的相对搜索路径,那就太好了【参考方案2】:

今天我遇到了同样的问题,我解决了这个问题:

Source="../../Resources/name.jpg"

【讨论】:

以上是关于从另一个程序集运行 WPF 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

从另一个项目的可执行文件启动一个项目的可执行文件

如何从另一个应用程序关闭 WPF 系统托盘应用程序?

WPF跨程序集共享样式(跨程序集隔离样式和代码)

无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员

SBT 程序集从另一个 JAR 中删除类

获取 WPF 的程序集版本