UWP应用的调试和发布模式

时间:2015-12-02 12:05:41

标签: xaml release uwp

我正在努力理解我在处理UWP应用程序时遇到的这个问题。我能够解决这个问题,但我仍然不清楚它背后的解释/推理。

我正在使用" EventTriggerBehavior"来自我的代码库中的XAMLBehaviours SDK。这个事件是为了检查" ClickedItem" GridView。

来自Microsoft.Xaml.Interactivity的IAction.Execute方法将ClickedItem事件作为参数获取。

函数定义是对象IAction.Execute(对象发送者,对象参数)

当我在调试模式下运行应用程序时,这工作正常,参数正在分配正确的值。但是当我将配置发布到Release时,我意识到我的Behaviors SDK无法正常工作。

这是之前的代码段:

object IAction.Execute(object sender, object parameter)
    {

        object propertyValue = parameter;
        foreach (var propertyPathPart in propertyPathParts)
        {
            var propInfo = propertyValue.GetType().GetTypeInfo().GetDeclaredProperty(propertyPathPart);
            if (propInfo != null)
                propertyValue = propInfo.GetValue(propertyValue);
        }
    }

在进一步调查中,我意识到propertyValue没有使用正确的值进行初始化。因此,为了解决这个问题,我在参数上进行了类型转换。

object propertyValue = parameter as ItemClickEventArgs;

现在一切都在发布模式下正常运行,包括启用代码优化时。

我将分类为System.reflection在启用Compile with .NET Native工具链时,在Release模式下无法正常工作。当我做Implicit演员时,它不再是一个问题了。

根据这段视频https://channel9.msdn.com/Shows/Going+Deep/Inside-NET-Native,我仍然需要为Behaviors SDK投射反射。我想知道更详细的信息并正确理解。

1 个答案:

答案 0 :(得分:2)

在你的项目uwp中,你可以找到一个名为Default.rd.xml的文件(在Properties文件夹中)。这是一个配置文件,指定在启用.net native时指定的程序元素是否可用于反射(或不可用)。

在您的情况下,您可以添加以下声明来添加ItemClickEventArgs类型。如果需要,可以选择声明命名空间而不是类型。

<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
  <Application>
    <!--
      An Assembly element with Name="*Application*" applies to all assemblies in
      the application package. The asterisks are not wildcards.
    -->
    <Assembly Name="*Application*" Dynamic="Required All"/>

    <!-- Add your application specific runtime directives here. -->
    <Type Name="Windows.UI.Xaml.Controls.ItemClickEventArgs" Browse="Required Public"/>

  </Application>
</Directives>

您可以查看此链接以获取更多详细信息:

Reflection and .NET Native

NET Native Deep Dive: Help! I Hit a MissingMetadataException