' system.missingMethodException而' mscorlib.dll中的异常

时间:2016-05-21 11:55:14

标签: c# wpf xaml

调试程序时出现异常。

  

抛出异常:' System.MissingMethodException'在mscorlib.dll中   System.Globalization.CultureInfo

     

"类型' System.Globalization.CultureInfo'上的构造函数没找到。"

在我的

xmlns:global="clr-namespace:System.Globalization;assembly=mscorlib"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
>
<Window.Resources>
    <ObjectDataProvider x:Key="CulturesProvider"
                        ObjectType="{x:Type global:CultureInfo}" 
                        MethodName="GetCultures">
        <ObjectDataProvider.MethodParameters>
            <global:CultureTypes>AllCultures</global:CultureTypes>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

    <CollectionViewSource x:Key="MyCVS"
                          Source="{StaticResource CulturesProvider}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="IetfLanguageTag" />
        </CollectionViewSource.SortDescriptions>
        <CollectionViewSource.GroupDescriptions>
            <dat:PropertyGroupDescription PropertyName="Parent" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

我是否需要导入任何引用才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

您发布的代码运行正常,我尝试将其绑定到ListBox,并且正确显示了不同的文化。

虽然我注意到您在“输出”窗口中描述的异常,但我开始调查。

Here您可以找到ObjectDataProvider的源代码。我链接到了我们真正感兴趣的部分。

在这里,您可以看到代码实际上会尝试创建您提供的ObjectType实例,即使您只是尝试在该类型上调用静态方法。这将因上述异常而失败,因为CultureInfo没有一个取零参数的构造函数。

评论here中甚至提到了这一点:

// if InvokeMethod failed, we prefer to surface the instantiation error, if any.
// (although this can be confusing if the user wanted to call a static method)

我还找到了this forum post,其中对同一问题的接受答案如下:

  

如果您的应用程序运行良好,则可以忽略输出。此输出用于调试数据绑定错误。但是,通常即使您的代码运行良好,也可能会出现输出,因此您可以忽略它。

所以我说你可以忽略这个错误,如果你的应用程序有效并且我测试它,它应该可以工作。

所有这一切,如果您对异常感到非常恼火,可以通过执行以下操作来修复它:

xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<Window.Resources>

    <ObjectDataProvider x:Key="CulturesProvider" ObjectType="{x:Type global:CultureInfo}" MethodName="GetCultures">
        <ObjectDataProvider.ConstructorParameters>
            <x:Static Member="sys:String.Empty" />
        </ObjectDataProvider.ConstructorParameters>
        <ObjectDataProvider.MethodParameters>
            <global:CultureTypes>AllCultures</global:CultureTypes>
        </ObjectDataProvider.MethodParameters>
    </ObjectDataProvider>

这不会引发异常,因为在CultureInfo代码中创建ObjectDataProvider的实例将会成功。它将使用带有一个string参数的构造函数。