XAML 解析异常 - 可以在应用程序的调试版本中找到附加属性,但在发布/安装版本中找不到
Posted
技术标签:
【中文标题】XAML 解析异常 - 可以在应用程序的调试版本中找到附加属性,但在发布/安装版本中找不到【英文标题】:XAML parse exception - can find attached property in the debug version of the app, but not in release/installed version 【发布时间】:2021-08-19 21:56:47 【问题描述】:我有一个附加属性,例如:
namespace Project.Controls.MyControl
public static class Transform
public static readonly DependencyProperty RelativeOffsetXProperty = DependencyProperty.RegisterAttached(
"RelativeOffsetX",
typeof(double),
typeof(Transform),
new PropertyMetadata(
default(double),
OnRelativeOffsetXChanged));
// ...
使用如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Project.Controls.MyControl">
<Style TargetType="x:Type local:MyControl">
<Style.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Controls/MyControl/IndexItemStyle.xaml" />
<ResourceDictionary Source="pack://application:,,,/Controls/MyControl/ArrowButtonStyle.xaml" />
<ResourceDictionary Source="pack://application:,,,/Controls/MyControl/MyControlTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Style.Resources>
<!-- more code -->
<Setter Property="IncreaseInAnimation">
<Setter.Value>
<Storyboard>
<!-- more code -->
<DoubleAnimation BeginTime="0:0:0"
FillBehavior="HoldEnd"
Storyboard.TargetProperty="(local:Transform.RelativeOffsetX)"
From="1"
To="0"
Duration="0:0:0.3" />
</Storyboard>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这在调试时效果很好,没有问题。但是在安装应用的生产版本时,它会在启动时崩溃,并出现以下异常:
类型引用找不到名为 'clr-namespace:Project.Controls.MyControl;assembly=Project, Version=X.X.X.0, Culture=neutral, PublicKeyToken=XXXXTransform'的类型
有没有人知道是什么原因造成的,或者有一些关于如何调试它的提示?这个错误完全没有意义,尤其是在调试中一切正常。
注意:一切都在同一个程序集中。
【问题讨论】:
你的意思是public Project.Controls.MyControl
实际上应该是namespace Project.Controls.MyControl
,并且该命名空间中还有一个名为MyControl
的类,其属性名为IncreaseInAnimation
,类型为Storyboard?
是的,这就是我的意思。我不能真正从项目中复制粘贴代码,所以这是我的错误。我现在修好了。在 Project.Controls.MyControl
命名空间中有一个 MyControl
类,它具有上述属性。
听起来很奇怪。该控件有一个 Storyboard 属性,您为该属性分配了一个带有 DoubleAnimation 的 Storyboard,它应该为同一控件实例上的附加属性设置动画?为什么故事板应该由控件属性存储?
这不是我的代码,它基于这个项目github.com/GuOrg/Gu.Wpf.FlipView。我不得不根据自己的需要组装零件并对其进行修改,但这无关紧要。启动调试时,代码按预期工作。由于某种原因,产品版本中的类型引用失败。
尝试提供Minimal, Reproducible Example。
【参考方案1】:
原来这个问题与 WPF 无关。我们使用的混淆器只是简单地优化了这个类。解决方案是将此文件排除在混淆之外。
【讨论】:
以上是关于XAML 解析异常 - 可以在应用程序的调试版本中找到附加属性,但在发布/安装版本中找不到的主要内容,如果未能解决你的问题,请参考以下文章
WPF 引发异常解析 XAML,其中包括 Winforms 用户控件