部署WPF项目后出现XamlParseException

23

我一直在尝试部署我的WPF应用程序,我使用设置向导创建了一个设置项目。我添加的唯一项目输出是Primary。构建并安装程序后,当我点击桌面上的exe时,立即弹出一个弹窗,上面写着“'我的程序'已停止工作”,所以我点击Debug程序并看到

发生未经处理的异常类型'System.Windows.Markup.XamlParseException',位于PresentationFramework.dll中

附加信息:“设置connectionId引发了异常。” 行号“10”和行位置“9”。

这个异常没有指向任何需要修复的方向。我的应用程序中没有任何“connectionId”。

之前我遇到过一个XAMLParseException,因为我的系统托盘中的NotifyIcon,但这是通过将图标添加到我的exe路径来修复的。我认为这可能是问题所在,所以我将图标添加到了我的设置项目中,连同其他所有项目输出。仍然不工作。

我知道这是一个模糊的错误,但是任何帮助都将不胜感激,我的应用程序根本无法运行。谢谢!

10个回答

32

通常这是由于没有将所有依赖项复制到输出目录引起的。就像您所说,错误消息并不是很有用,但我建议检查您的应用程序是否有可用于解析已解析类型的所有必要依赖项。

通常为已引用的程序集设置“复制本地”属性为true就足够了,但我曾经遇到过一些情况,其中引用本身也会引用其他程序集,因此可能需要明确添加这些引用。

更新:

@BENN1TH重要补充.

如果您想查看程序集所需的内容:

我曾经在发布和安装我的项目后遇到相同类型的问题(在调试VS2013桌面版中运行良好,无错误等),但使用来自http://geekswithblogs.net/lbugnion/archive/2007/03/14/108728.aspx的建议,然后安装项目就可以正常工作了。

try

{
  InitializeComponent();
}
catch ( Exception ex )
{
  // Log error (including InnerExceptions!)
  // Handle exception
}

我确保在我的程序集中包含了我所引用的所有dll文件。那么我该如何知道我可能需要哪些其他的dll文件呢? - Drew
哦,现在它可以工作了。我需要引用并确保我的图标在应用程序文件夹中。我认为问题的一部分是我将图标与项目输出一起添加到构建中。我需要先构建、安装,然后再添加图标。无论如何,非常感谢您的帮助。 - Drew
6
当我遇到这个异常时,我能够进入调试器并查看InnerException以确定缺少哪个dll文件。 - Kevin Kalitowski

9
清理和重建解决方案可能有所帮助!

重建对我有用,如果没有这个答案,我可能不会想到,所以谢谢。 - Matt
在从 Blend 添加动画触发器后,我遇到了同样的问题。删除 bin 和 obj 然后重新构建,解决了这个问题。 - Slime recipe

3

我曾经在VS2010中使用WPF解决方案时遇到了这个问题。该解决方案包含一个简单的dll和一个用于测试该dll的测试项目(设置为启动)。我的dll设置为x86,而我的测试项目设置为x64。当我将测试项目更改为x86时,问题得到了解决。


2

曾经我发布并安装了我的项目后遇到了同样类型的问题(在debug VS2013 Desktop中正常工作,没有错误等),但是使用了来自http://geekswithblogs.net/lbugnion/archive/2007/03/14/108728.aspx的建议,然后项目成功安装并运行。

try

{
  InitializeComponent();
}
catch ( Exception ex )
{
  // Log error (including InnerExceptions!)
  // Handle exception
}

2

如果在调试器中遇到此异常,请检查异常的InnerException成员。这可能会为您提供有关缺失的程序集的提示。


1

我刚刚花了四个小时来解决这个问题。最终发现这与XAML无关!原来是MainWindow initialize中的代码存在一个小错误。

如果其他方法都失败了,可以检查一下那里。


0

清理和重建项目对我没有效果。

您可以尝试删除 bin 目录,然后重新构建,我通过这种方式解决了我的问题。


0

我通过移除程序集签名来解决了这个问题,具体位置如下:

enter image description here


0

我遇到了这个问题。这个问题是由于 Microsoft.Expression.Drawing.dll 引起的,请下载该 dll 并添加引用。


@HansZ,也许他正在试图回答这个问题,但用了一种神秘的方式。 - rpax
@Hans Z,这可能是一个答案,因为DLL问题是Microsoft的常见错误。 - ABCD
同意,已删除注释。 - Hans Z.

0

当我在应用程序内运行多个dll并且这些dll加载的同一依赖项具有不同版本时,我遇到了这个问题。

通常我们在发布生成期间合并dll以防止此问题,但如果我们在开发周期中测试多个未合并的dll集,则会出现此问题。

解决方案是仅测试一个未合并的dll集,对于未进行测试的其他dll,使用合并的发布版本或确保依赖的dll版本相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接