XAML无法编译,但没有任何错误消息,如果用户定义的对象是第一个资源,并且紧跟x:Array资源

Pet*_*iho 8 c# wpf xaml compiler-errors

我发现这个问题很奇怪,可能是一个XAML/Visual Studio错误.我希望其他人发现它不那么奇怪,并且解释为什么我所做的事情是错误的,和/或更好的解决方法,而不仅仅是以不同的顺序声明资源.

我有这个简单的XAML:

<Window x:Class="TestSOAskArrayXaml.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:TestSOAskArrayXaml"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <local:A x:Key="a1"/>
    <x:Array x:Key="listBoxItems" Type="{x:Type system:Double}">
      <system:Double>0.25</system:Double>
    </x:Array>
  </Window.Resources>

  <Grid/>
</Window>
Run Code Online (Sandbox Code Playgroud)

当我尝试编译项目时,我收到以下错误:

1> ... MainWindow.xaml.cs(25,13,​​25,32):错误CS0103:当前上下文中不存在名称"InitializeComponent"

我理解错误的含义,但不是为什么会发生错误.XAML看起来很好,编译它没有错误,但由于某种原因,InitializeComponent()通常放置的自动生成的.gics文件没有被创建或使用(即使文件来自之前成功的编译,它仍然是没有编译成程序集).

如果我只是颠倒资源的顺序,它工作正常:

  <Window.Resources>
    <x:Array x:Key="listBoxItems" Type="{x:Type system:Double}">
      <system:Double>0.25</system:Double>
    </x:Array>
    <local:A x:Key="a1"/>
  </Window.Resources>
Run Code Online (Sandbox Code Playgroud)

附加信息:

  • A是我项目中的任何类.为了这个测试的目的,它被声明为class A { },即一个空类,但我首先遇到这个问题,将转换器实例放入资源.
  • 如果我使用内置类型而不是A,例如<system:String x:Key="a1">Some string</system:String>,错误不会发生.
  • 如果我将一个内置类型的对象作为资源放在用户定义的类型A对象和我的数组资源对象之间,它也可以正常工作!

换句话说,似乎有一个或多个用户定义的类型对象作为第一个资源元素,紧接着是一个数组对象,导致编译失败.其他组合似乎工作得很好.


有人可以解释为什么这是预期的行为(除了重新安排我的资源,我应该做些什么来避免它),或者确认我认为这是XAML构建过程中的错误并不是完全疯了?


编辑:

鉴于这可能是一个真正的错误,我继续在这里打开一个Connect错误报告:https://connect.microsoft.com/VisualStudio/feedback/details/1441123/xaml-fails-to-compile-without-error -if用户自定义对象-是先资源和-随后-立即逐-X-阵列资源

另请参阅相关/类似的Stack Overflow问题:当前上下文中不存在名称"InitializeComponent":奇怪的行为


编辑#2:

WPF更新了Connect报告(参见上面的链接),声明该bug的修复程序将在下一版本的.NET中发布:

Sachin [MSFT]于2016年3月9日下午3:53发布

WPF团队已审核此问题并在下一版本的.NET中修复.我们感谢您的反馈,并考虑解决此问题 - WPF团队

Pet*_*iho 2

WPF 团队已更新 Connect 报告(请参阅相关链接),指出该错误的修复将在下一版本的 .NET 中发布:

\n\n
\n

由 Sachin [MSFT] 于 2016 年 3 月 9 日下午 3:53 发布

\n WPF 团队已审查此问题并在下一版本的 .NET 中修复。我们感谢您的反馈,并认为此问题已解决 \xe2\x80\x93 WPF 团队

\n
\n\n

不幸的是,微软已经停用了 Connect 站点,因此实际报告不再可用。但我在这个问题中提出的问题不应该再出现。

\n